2020-05-08 11:14

刚提到 jfinal 是独创的 "API 引导式" 配置, 所以,你再回看整个 jfinal ,没有一个地方是直接依赖于外部配置文件的,都是 setter 方法进行配置

2020-05-08 11:13

jfinal 的配置属于独创的 "API 引导式" 配置,目的是为了让你避免自己去记忆各种配置名称,因为 API 引导方式可以让 eclipse 自动提示你配置的名称(方法名的代码提示),还可以在 API 上通过注释告诉你配置的各种用法,免去学习成本

但有些配置必须要外部化,不能写在 java 代码中,因为可能需要常常去修改,所以 PropKit 就建立了配置文件与 API 引导式配置的桥梁

2020-05-08 11:10

undertow 为嵌入式而生,应该是不支持配置文件方式来配置 Listener 等东西的

但你可以通过 jfinal undertow 提供的 PropExt 或者 jfinal 自带的 PropKit + Prop 来读配置文件,然后在 java 代码中使用

你还可以自已写读取 xml 的工具类来读 web.xml 让 undertow 使用

就好比 jfinal 借助 PropKit + Prop,可以使得配置文件可以在 YourJFinalConfig 中使用是一个道理

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:46

补充一下,上例中用到的 filter 方法,只是演示了一种用法,你还可以通过正则表达式等其它方法决定其行为,只要是返回值为 true ,其 table 将会被过滤掉

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 其实处处可扩展,建议有时间的时候稍微浏览一下源代码,必然会轻松增加很多新技能

2020-05-07 20:46

第一次会将依赖下载到本地库,这个过程会比较慢,一般建议将 maven 配置指向阿里云的 maven 库

第一次下载完成以后,后面无需下载

2020-05-07 20:45

很可能是 undertow 的依赖包还未下载完成

在控制台的项目根目录下面执行下面代的命令:
mvn clean package

让 maven 先下载完成,再试

2020-05-07 19:47

拦截器中使用 setAttr,控制器中使用 getAttr

2020-05-07 18:05

注意看文档:
https://jfinal.com/doc/4-8

要添加 cglib 的依赖

2020-05-06 13:52

@七五热 新版本发布以后记得提醒我写到文档中

现在不能写,未发布到 maven 中心库

2020-05-05 15:32

@INFECTION_K 刚刚已经提交代码,了你看看是不是符合你的需求:
https://gitee.com/jfinal/jfinal/commit/63490d7099be1018b869f6b3060cbf7e4a939c6c

2020-05-05 11:40

jfinal 新版本添加的这个功能, 与你的实现思路基本一致:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/template/Engine.java

public Engine addEnum(Class enumClass) {
Mapmap = new HashMap();
Enum[] es = enumClass.getEnumConstants();
for (Enum e : es) {
map.put(e.name(), e);
}
return addSharedObject(enumClass.getSimpleName(), map);
}

2020-05-05 09:57

@xiuj 打印参数参考这个:
https://jfinal.com/share/1909
https://jfinal.com/share/492

2020-05-05 09:53

用一下最新版本的 jfinal , 以前其中的某一个版本注掉了一段代码:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/render/RedirectRender.java

注意上面的代码第 77 行

新版本使用方法如下:
https://jfinal.com/share/2093

如果不想使用线上的新版本,也可以通过继承 RenderFactory 来实现:
public void MyRedirectRender extends Render {
....
这里的代码照抄最新版本的 RedirectiRender.java
}

public class MyRenderFactory extends RenderFactory {
public Render getRedirectRender(String url) {
return new MyRedirectRender(url);
}
}
}

最后配置一下就可以了:
me.setRenderFactory(new MyRenderFactory());