jfinal 3.0 freemarker视图路径的设置问题

在jfinal2.2中使用如下方式设置是没问题的,可是在jfinal3.0中怎么就不可以了呢?

我通过如下的方式设置视图路径的

@Override

public void configConstant(Constants me) {

// TODO Auto-generated method stub

loadPropertyFile("system.properties");

PropKit.use("system.properties");


}


@Override

public void afterJFinalStart() {

Configuration cf = FreeMarkerRender.getConfiguration();

Map<String, Object> map = new HashMap<String, Object>();


map.put("webcxp", JFinal.me().getContextPath());

map.put("locale", getProperty("locale"));


try {

cf.setSharedVaribles(map);

} catch (TemplateModelException e) {

e.printStackTrace();

}

if (getPropertyToBoolean("jfinal.devmode")) {

cf.setTemplateUpdateDelay(getPropertyToInt("template.update_delay", 0));

} else {

cf.setTemplateUpdateDelay(getPropertyToInt("template.update_delay", 300));

}

cf.setDefaultEncoding(getProperty("template.encoding"));

cf.setURLEscapingCharset(getProperty("url_escaping_charset"));

cf.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);

cf.setWhitespaceStripping(true);

cf.setClassicCompatible(true);

cf.setNumberFormat(getProperty("template.number_format"));

cf.setBooleanFormat(getProperty("template.boolean_format"));

cf.setDateTimeFormat(getProperty("template.datetime_format"));

cf.setDateFormat(getProperty("template.date_format"));

cf.setTimeFormat(getProperty("template.time_format"));

cf.setServletContextForTemplateLoading(JFinal.me().getServletContext(), getProperty("template.loader_path"));


logger.info(" cxp web server is ready!!");

super.afterJFinalStart();

}

其中system.properties的内容为


#------------ Template ------------

template.encoding=UTF-8

#template.update_delay=3600

#\u5f00\u53d1\u4f7f\u7528\u6a21\u677f\u66f4\u65b0\u65f6\u95f4\u4e3a0

template.update_delay=0

template.number_format=0.######

template.boolean_format=true,false

template.datetime_format=yyyy-MM-dd HH:mm:ss

template.date_format=yyyy-MM-dd

template.time_format=HH:mm:ss

template.loader_path=/WEB-INF/template


locale=zh_CN

url_escaping_charset=UTF-8


jfinal.devmode=true

在路由配置中添加如下代码:

me.add("/",IndexController.class);

然后我在indexcontroller中实现如下方法:

public class IndexController extends Controller {

public void index()

{

renderJsp("index.jsp");

}

public void test()

{

render("test.html");

}

}

最后调用test时为什么访问不到调用/WEB-INF/template路径下的test.html文件呢?




评论区

JFinal

2017-04-25 10:39

freemarker 的路径不建议这么配置,直接在 configRoute(Routes me) 中对 Routes 进行配置就可以了:
me.setBaseViewPath("/WEB-INF/template")

你上面的代码应该也是可以的,但不如我建议的办法好

JFinal

2017-04-25 10:40

补充一下, jfinal 3.0 默认使用的是 jfinal template engine,所以如果你需要在 jf 3.0 中使用 freemarker , 需要配置一下:
me.setViewType(ViewType.FREE_MARKER);

JFinal

2017-04-25 10:40

建议看一下 jfinal 3.0 手册,里面针对升级到 3.0 有专门的一章

vae

2017-04-25 17:03

@JFinal 通过me.setBaseViewPath("/WEB-INF/template"),这样的设置后就无法 render 到 WebRoot 根下面其它的非指定目录下的文件了,例如,我想 render到 WebRoot/xyz/abc.html ?

vae

2017-04-25 17:23

@JFinal 恩 我会重新看看的 谢谢

JFinal

2017-04-25 20:11

@vae 可以的,只要你 render 的时候以 "/" 打头就可以了,例如: render("/xyz/ab.html");

热门反馈

扫码入社