怎么在JFinal中设置模板路径?

IT猫 发布于 2012/10/23 16:52
阅读 4K+
收藏 5

@JFinal 你好,想跟你请教个问题:

JFinal怎么设置模板路径呢?

加载中
1
JFinal
JFinal

关于模板路径有如下几个相关的地方:

1:在YourJFinalConfig.configRoute(Routes me)中配置路由时指定模板路径

public void configRoute(Routes me) {
  me.add("/user", UserController.class);
  me.add("/blog", BlogController.class, "/otherPath");
}
以上代码,第一个配置中只有两个参数,那么模板路径就是: WebRoot/user,而第二个配置有三个参数,那么模板路径就是: WebRoot/otherPath。在Controller之中通过 render("demo.html")来取模板 demo.html的时候会自动去上面配置的模板路径去找

2:在Controller中通过输入绝对路径直接指定模板路径

public class UserController {
  public void index() {
    render("/absPath/user.html");
  }
}
以上代码中的 render("/absPath/user.html"),将去 WebRoot/absPath路径下去找 user.html。凡是以 "/" 打头是指绝对路径。

    建议仔细看一下 JFinal 手册,欢迎常来提建议 :)


1
27号
27号

可以配置全部模板的基础路径:

@Override
	public void configConstant(Constants me) {
		me.setBaseViewPath("/WEB-INF/path");
	}

1
蚩蚩桑葚
蚩蚩桑葚
me.setBaseViewPath("/WEB-INF/path");

这种方法不太好,render的时候都得改成,太多地方需要修改

render("blog/index.html");

最后想了一个办法

@Override
	public void afterJFinalStart() {
		try {
			FreeMarkerRender.getConfiguration().setSharedVariable("base",
					JFinal.me().getContextPath());
			FreeMarkerRender.getConfiguration().setServletContextForTemplateLoading(JFinal.me().getServletContext(), "/WEB-INF/templates");
		} catch (TemplateModelException e) {
			e.printStackTrace();
		}
		FreeMarkerModelUtils.creatModel();
		super.afterJFinalStart();
	}







JFinal
JFinal
考虑过实现这样的功能,但是这样就无法 render 到 WebRoot 根下面其它的非指定目录下的文件了,例如,我想 render到 WebRoot/xyz/abc.html 就不方便了
0
JFinal
JFinal

引用来自“27号”的答案

可以配置全部模板的基础路径:


@Override
	public void configConstant(Constants me) {
		me.setBaseViewPath("/WEB-INF/path");
	}


没错,设置这个以后,基础路径不再是 WebRoot 了,满足那些习惯于把view放WEB-INF下的开发者们的需求 :)
0
IT猫
IT猫

引用来自“JFinal”的答案

关于模板路径有如下几个相关的地方:

1:在YourJFinalConfig.configRoute(Routes me)中配置路由时指定模板路径

public void configRoute(Routes me) {
  me.add("/user", UserController.class);
  me.add("/blog", BlogController.class, "/otherPath");
}
以上代码,第一个配置中只有两个参数,那么模板路径就是: WebRoot/user,而第二个配置有三个参数,那么模板路径就是: WebRoot/otherPath。在Controller之中通过 render("demo.html")来取模板 demo.html的时候会自动去上面配置的模板路径去找

2:在Controller中通过输入绝对路径直接指定模板路径

public class UserController {
  public void index() {
    render("/absPath/user.html");
  }
}
以上代码中的 render("/absPath/user.html"),将去 WebRoot/absPath路径下去找 user.html。凡是以 "/" 打头是指绝对路径。

    建议仔细看一下 JFinal 手册,欢迎常来提建议 :)


今天比较忙,才上OSC,我刚才发现不是模版的路径出错了,而是freemaker的模版我写错了,文件没有找到,导致页面无显示。由于忘记引入log4j的配置文件,也没有在控制台看到错误,刚才把配置文件放进去后才知道哪错了,哎.....细心细心!
JFinal
JFinal
回复 @27号 : 未来会提供多个 ILoggerFactory实现,覆盖所有这些常见的日志系统,此问题将不复存在 :)
27号
27号
回复 @JFinal : 是啊。但是想看jfinal的log,就得两个都引入进来,呵呵。
绝望的八皮
绝望的八皮
回复 @JFinal : 不过我觉得现有的logger的接口需要修改(String message,Exception e) 这种接口是不够用的。比如logback支持可变参数的占位符日志logger.debug("a is {},b is{}, c is {}",a,b,c)这样的接口。希望jfinal logger能考虑支持这样的日志方式:)
JFinal
JFinal
回复 @27号 : 下一版将开放 ILoggerFactory接口,则能扩展新的Logger支持,如 slf4j也可以。即便是JFinal 1.1.4版本,你也可以在项目中用slf4j,只不进JFinal 自身没用这个 : )
27号
27号
建议jfinal支持slf4j,我比较喜欢用这个。。。哈哈。@jfinal
返回顶部
顶部