2020-05-08 17:39
@tctc4869 "不该自己处理" 的意思如下:
1:假定你老项目处理的请求的 url 格式为 /xxx/...
2:假定你让 jfinal 整合后处理的请求的 url 格式为 /yyy/...
3:在 web.xml 中先配置 JFinalFilter,后配置 spring 的 filter 或 servlet,那么请求会先到达 jfinal
那么,jfinal 的 JFinalFilter 会最先接管所有请求:
1:/xxx/... 这种原本该老项目处理的 url 也会被 jfinal 接管
2:接管以后,如果不 "放行" 的话,默认会返回 404 错误
所以,你需要用一个 jfinal 的 Handler 来跳过这些 "不该自己处理" 的 url 请求,handler 内部结构大致如下:
public MyHandler extends Handler {
public void handle(String target, HttpServletRequest req, HttpServletResponse resp,boolean[] isHandled) {
if (target.starts("/xxx/") {
// 这里要放行给 spring
return ;
} else {
next.handle(target, req, resp, isHandled);
}
}
最后配置一下这个 handler
me.add(new MyHandler());
更多 handler 的例子参考:
com.jfinal.ext.handler 包中的源码
2020-05-08 17:30
@祥子 这个通过扩展 MetaBuilder 也一样可以实现的, jfinal 只实现了最常用的场景,通常都是大部分 table 需要重成,少部分使用 addExcludedTable 来排除
此外,即便你是新增表,也可以老表、新表一起生成,只会覆盖 Base Model 等类文件,十分安全
老表、新表一起生成还有个好处,在老表结构改变以后,重新生成是强需求,否则很难办
2020-05-08 17:27
向 Model 中 put 的时候,可以直接 put List 进去,而不必循环进行 put
FastJsonFactory 是通过 getter 方法进行转换的,针对 Model 转换可以用生成器生成 getter 方法
join 查询出来的数据,目前只能通过 JFinalJsonFactory 来转换
我觉得你可以选取一个最常用的场景,例如 JFinalJsonFactory 被选取。 在最常用场景之上,可以临时使用其它 json 转换,例如:
String jsonString = FastJson.getJson().toJson(...);
renderJson(jsonString);
以上两行代码,就是在临时使用 FastJson 实现进行转换
2020-05-08 10:53
jfinal 是标准的 java web 项目,所以,只需要在 web.xml 中添加 JFinalFilter 就可以将 jfinal 集成到原有的 java web 项目中去了
不想改成 maven,可以在首页右侧下载 jfinal-4.8-all.zip ,里头有相应的 jar 包可以放到项目中使用
通过在 web.xml 中引入 jfinal, 相当于你现有的项目与 jfinal 是共存的,新功能就可以直接做到 jfinal 中去了,两头互不干扰
有一个问题需要注意,web.xml 中配置的 JFinalFilter 与其它的 Filter 在调用时有先后次序,先配置的先调用
所以,如果配置在前面的 Filter 要注意将 "不该自己处理" 的请求 "放行", 否则后续的 Filter 收不到请求
2020-05-08 10:45
MetaBuilder 中留了两个扩展的地方,一个是 isSkipTable(String tableName) ,另一个是 filter(Predicate predicate)
其中前一个需要继承 MetaBuilder 来扩展,这个是在 JDK 8 之前给定的扩展方式
后来 jfinal 要求至少 JDK 8 以后,留了 filter 这第二个扩展,扩展方式在源码的注释里头有:
Generator gen = new Generator(...);
gen.setMetaBuilder(new MetaBuilder(dataSource).filter(
tableName -> {
return tableName.startsWith("SYS_");
})
);
gen.addExcludedTable("error_log"); // 注意这行代码要放在上面的之后调用
gen.generate();
上面的例子中,排除掉了以 "SYS_" 打头的 table,应该正好是你需要的使用方法
jfinal 其实处处可扩展,建议有时间的时候稍微浏览一下源代码,必然会轻松增加很多新技能