2018-03-27 17:53

这个留给 BaseController 中去扩展比较合适,现在 Controller 的代码已经很多了

这个需求还是头一次碰到,如果很多人都提出来会考虑添加

2018-03-27 16:46

@rirai 其实你要是真的把 spring 用起来,碰到的问题远远比你用 jfinal 要多得多

我用 spring 三年多时间,看过 spring 很多代码,对其十分了解

2018-03-27 16:25

集成 swagger 参考一下这两个贴子:
http://www.jfinal.com/share/347
http://www.jfinal.com/share/356

jfinal 一直专注于 MVC + ORM,你可以想象成是 spring mvc + hibernate/mybatis,一个框架自然会有自己的定位以及重点专注的目标

spring 由于历史悠久,再加上培训机构的推波助澜生态比较大,集成的周边很多。但缺点也会很明显:臃肿、学习成本高、代码量大、可控性差

可以试着读一下 Spring 源代码,光是使用 AbstractTemplateViewResolver 扩展出一个 view 来,里头有七层继承以及各种关联,是非常痛苦的一件事情

而 jfinal 扩展一个 view,只需要继承一下 Render,Render 就一层一看就明白怎么扩展

使用 Spring 基本上你只能将之当成黑盒子,老老实实地照着它的文档去使用,很难很费劲去了解它内部的工作方式,spring 太庞大了

此外,即便是 spring 的生态大,你在使用 Spring + swagger 等第三方的时候未必不会碰到问题

2018-03-27 16:14

创建一个 jfinal web 项目,引入一下 jfinal weixin 的依赖,然后就可以使用了,具体用法这里有例子:
https://gitee.com/jfinal/jfinal-weixin/tree/master/src/main/java/com/jfinal/weixin/demo

2018-03-27 16:12

where id in(?) 这里头就一个问号,但却使用了多个参数,是 JDBC 不支持

有多少个参数就要用多少个问号,例如:
Db.update("... where id in (?, ?, ?)", 1, 2, 3);

2018-03-26 16:18

String[] menuIds = getParaValues("menu_ids"); 先获取到数组,然后想办法存

2018-03-26 16:06

根据控制台输出的 jfinal action report 中的 paramerter 这一栏选择使用接收参数的方法

2018-03-26 15:30

@badouyuren 记得分享出来,或许可以改进 enjoy

2018-03-26 15:19

@badouyuren 不是 jfinal 不支持,而是 jfinal 反射使用 java.util.LinkedHashMap$LinkedKeySet 这个内部类时 JDK 不允许,可能是有什么安全策略,具体还没研究过

用 java 代码调用 map.keySet() 是可以的,但是 enjoy 是先获取的 Method 对象,然后 method.invoke() 反射调用的这个 keySet() 方法,所以出了问题

这个问题归根结底是 JDK 不允许这么来调而引发的, enjoy 本身是支持这个功能的

另外,你还可以试试这个:
#for( x : map.entrySet())
#(x.getKey())
#(x.getValue())
#(x.key)
#(x.value)
#end

总之就是 Java 表达式规则

2018-03-26 15:09

jfinal enjoy 对 map 的迭代比 freemarker 方便多了:
#for( x : downloadMap)
#(x.key)
#(x.value)
#end

2018-03-26 14:41

将 PathKit.getRootClassPath(); 改成下面的代码来代替看看对不对:
PathKit.getWebRootPath() + File.separator + "WEB-INF" + File.separator + "classes";

2018-03-26 14:37

@Jason、 部署用的 tomcat 吗? 用这个应该就没事

2018-03-26 14:14

还有一个办法是在 configPlugin 中自己手动调用 start() 方法
public void configPlugin(Plugins me) {
try {
arp.start();
}
catch(...) {
...
}
}

注意相关的 DruidPlugin 也需要这样调用,一般来说,在 DruidPLugin 启动失败后,后而后 arp 就可以放弃启动了

2018-03-26 14:12

configPlugin 仅仅是 me.add(...) 添加而且,具体的初始化操作并不在这里

如果你只是数据源注册的话, 可以继承一下 ActiveRecordPlugin, 覆盖掉父类的 start() 方法,大致如下:
public void start() {
try {
super.start();
} catch(...) {
...
}
}

2018-03-26 14:10

@溪碧旗 先配置好日志,然后有异常会自然输出到控制台

下载首页的 jfinal demo,直接用上里头的 log4j 配置与 jar 包