enjoy模板问题

忏愧,enjoy出来这么久,一直没用上,最近新项目用上3.3版本,这里有一问题,

想用模板生成一个html字符串用来发送邮件。我用demo测试如下:

String html=Engine.use().getTemplate("blog.html").toString();

尽报错,什么原因,

 File not found : null/blog.html

这个null是哪里来的?找不到这个blog.html模板文件?


[ERROR]-[Thread: qtp24933899-21]-[com.jfinal.core.ActionHandler.handle()]: /blog
java.lang.RuntimeException: File not found : null/blog.html
	at com.jfinal.template.source.FileSource.getContent(FileSource.java:70)
	at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:153)
	at com.jfinal.template.Engine.getTemplate(Engine.java:138)
	at com.demo.blog.BlogController.index(BlogController.java:22)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:73)
	at com.demo.blog.BlogInterceptor.intercept(BlogInterceptor.java:17)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:67)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:83)
	at com.demo.common.MyContextPathHandler.handle(MyContextPathHandler.java:37)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:73)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:365)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Thread.java:745)



评论区

JFinal

2018-09-20 22:31

配置一下 engin.setBaseTemplatePath(...)

最后,建议用 jfinal 3.4版本,过几天发布 3.5 版本极速升级一下

fox

2018-09-20 23:21

@JFinal 非需要输入文件的绝对路径吗?

engine.setBaseTemplatePath("F:\\xxxxx\\WebRoot\\");

还有输不出来字符串的值
String html=engine.getTemplate("/blog/blog.html").toString();
System.out.println("**************************");
System.out.println(html);
System.out.println("**************************");
输出的内容如下:
**************************
com.jfinal.template.Template@1353483
**************************

JFinal

2018-09-21 08:26

@fox 输出使用 render 方法

setBaseTemplatePath 可以不设置,而是用 setToClassPathSourceFactory()

多花 10 分钟浏览下文档

fox

2018-09-22 00:41

@JFinal 用renderToString可以了,thks

setToClassPathSourceFactory 你说的这个方法,我是真没找到。

JFinal

2018-09-22 11:41

@fox jfinal 3.4 才有 engine. setToClassPathSourceFactory(...) 方法,你用的是 jfinal 3.3,用下面这个方法是同样的功能:
engine. setSourceFactory(new ClassPathSourceFactory())

此外,jfinal 3.4 默认已经可以不用配置 setBaseTemplatePath(...),可以直接用:
engine.getTemplate("D:/myproject/view/xxx.html");

也可以这样用:
engine.getTemplate("/var/myproject/view/xxx.html");

还可以试一试:
engine.getTemplate("myproject/view/xxx.html");

总之是去除了 null 值的影响

fox

2018-09-22 16:56

@JFinal thks, 3.3都没消化完,就用3.4会不会太快,3.4有哪些优化?

JFinal

2018-09-22 17:45

@fox 有很多改进,但用法几乎没有变化,这里是 chnagelog:
http://www.jfinal.com/share/847

升级的话,三分钟内可以搞定:
http://www.jfinal.com/doc/14-1

注意看,3.3 升到 3.4只需要注意下面三点:
1:IStringSource 更名为 ISource
2:指令扩展中的 java.io.Writer 改为com.jfinal.template.io.Writer
3:configConstant(Constants me) 中指定日期型数据转换格式 me.setJsonDatePattern(...)

热门反馈

扫码入社