Jfinal生成静态页面,Jfina生成html页面静态化

部分Web项目需要将页面静态化,JFinal增加几行代码即可搞定。

例如:

假定原有Controller Action中首页方法如下

/**
	 * 首页
	 */
	public void index()  {
		//原模版路径
		String yourTplPath = "index.html";
		render(yourTplPath);
	}

静态化只需要增加几行代码即可,

经过波总的指导,有更方便的写法。

/**
	 * 首页
	 */
	public void index()  {
		//原模版路径
		String yourTplPath = "index.html";
		//静态html文件保存的路径
		String staticHtmlPath = "/jfinal.com/index.html";
		Template template = RenderManager.me().getEngine().getTemplate(yourTplPath);
		template.render(null, outPath);//直接输出,简洁
		render(yourTplPath);//是否继续输出到浏览器按自己的业务需求决定
	}

以上只是示例,给有需要的朋友。

另外在静态化的过程中,有个小坑,需要注意下:

部分应用可能会存在部署目录,即常用的ctx,Jfinal中配置如下:

	public void configHandler(Handlers me) {
		me.add(new ContextPathHandler("base"));
	}

原模版中使用 #(base) 输出没问题,即为“”,但在生成静态化的文件时,直接输出了 null,兼容的写法为 #(base??"")

EOF


评论区

JFinal

2020-03-04 21:08

如果生成的静态页面只需要在不存在时生成,需要加 if 判断,否则每次访问这个 index() action 时都要生成一次了

当然,如果这个 action 只是作为生成静态文件触发机制是没问题的

还有个改进建议,Template 内有支持 String fileName 与 File file 的方法,所以可以去掉 FileWriter 改为下面的用法:
template.render(null, "xxx.html");

也可以这么用:
template.render(null, new File("xxx.html"));

上面两种方式的优点除了省代码以外,还无需关心 fileWriter.close() 这种处理

谢谢分享

SuperEric

2020-03-05 09:42

@JFinal 谢谢指导,一般正式使用时render或输出静态只会2选1,示例仅测试功能。

SuperEric

2020-03-05 09:54

@JFinal 改进了~ 确实简洁,好用。

JFinal

2020-03-05 11:07

laofa

2020-03-05 19:58

与模板同一个目录的js如何引入?

SuperEric

2020-03-07 13:46

@laofa 横版路径怎么取的JS也就怎么取

lightning

2021-12-07 17:24

@SuperEric 请问大佬,我按照你的方法生成的静态页面怎么是没有数据的,只是原空模板页面的静态页而已,controller中获取的数据都没有,求教大佬