2021-02-28 14:42
@dqpb @Path 注解一共有两个参数,其中第二个参数是 viewPath,例如
@Path("/customer", "/")
当你省略第二个参数的时候,默认值将使用第一个参数,所以
@Path("/customer")
将等价于:
@Path("/customer", "/customer")
所以,你的 render 中的路径会多出来一个 customer
@Path 注解是从原先的 configRoute(Routes me) 中的
me.add("/customer", controllerClass, "/customer")
演化过来的,所以配置规则也沿用了以前
这个在文档中有详细的说明:
https://jfinal.com/doc/2-3
文档中有如下一句话:
@Path 注解可以配置 controllerPath 与 viewPath 两个参数,当 viewPath 省略时默认与第一个参数值相同。上例中的两个 Controller,第一个只配置了 controllerPath,第二个还配置了 viewPath。
2021-02-28 12:25
@dqpb 主要是添加 log4j.properties 文件,下载首页右侧的 jfinal demo, 将里头的 log4j.properties 文件放到自己项目的合适位置即可
注意要添加 log4j 依赖
2021-02-27 01:03
有好多方法呢,最简单的方法是用 getTemplateByString(...),例如:
Template t = engine.getTemplateByString( string 在此);
String str = t.renderToString(...);
还可以直接输出到文件: t.render(..., '输出文件名.txt');
以上是通过 getTemplateByString,还可以通过 getTemplate(ISource),
这个 ISource 可以指向任意地方,例如可以是从数据库:
public class DbSource implements ISource {
boolean isModified() {return false};
String getCacheKey() {return null);}
String getEncoding() {return "utf-8"}
StringBuilder getContent() {
// 从数据库查询得到模板内容
String str = Db.queryString("select info_template from ... where ...", ...);
return new StringBuilder(str);
}
}
然后,通过 engine.getTemplate(new DbSource()).render(...) 就实现了从数据库获取模板的功能
一般情况建议通过第一种方式:
String str = Db.queryString("select info_template from ... where ...", ...);
Template t = engine.getTemplateByString( str );
String str = t.renderToString(...);
2021-02-25 11:38
@lcmkc 是否用 root 运行完全与 jfinal 或者 undertow 无关
切换到相应的用户,直接运行就可以了
在 "非 root" 用户状态下,使用 sudo jfinal.sh start 可以以 root 用户运行
这纯粹是 linux 知识,与 jfinal 肯定是无关的
但你要注意权限问题, 运行起来以后,你的项目代码访问到的文件需要赋予好权限。例如起码你的项目部署目录必须要是当前用户能访问的,仍然是纯 linux 问题