2018-10-23 19:44

补充一下,jfinal demo 仅为了展现最简洁的 demo,所以对 getModel(...) 没有添加:
blog.keep("id", "title", "content");

2018-10-23 19:43

@alotuser 这个问题在 6 年半以前就有人提到过,但对方提出来的时候 jfinal 就已经有提供 API 来快捷解决问题, 6 年半以前的贴子在这里:
https://www.oschina.net/question/260040_46570

这个问题学名叫:mass assignment, 楼主能看到这个现象证明极其细心,在 IT 这行很有发展潜力啊

简单说,在 getModel(...) 以后,通过 Model.keep(....) 即可指定哪些字段是保留的,哪些是要删除的,例如更新用户信息时如果用到了 User ,那么:
getModel(User.class).keep("nickName", "email").update();
就只会更新指定的字段

无论恶意用户如何在表单中制造新的字段都不可能形成威胁。 这个问题其实对传统的 web 框架也有同样的问题,除非为接收表单单独做一个只存在部分字段的 setter 方法,否则那些没在表单中的字段也可以被注入

2018-10-23 15:54

@rirai 这个功能我天天都在用的,本站 jfinal.com 全站前后台都是这么用的

2018-10-23 15:37

@JJfinal 下载的 demo 可以直接用,严格测试过的

2018-10-23 15:35

一般是 JFinal.start(...) 调用时的第一个参数有错误,如果是标准的 maven web 项目,应该传入 "src/main/webapp"

如果是传统的 Java web 项目,要根据你的实际路径来传值,一般传入 WebRoot 或者 WebContent

如果这个路径没问题,还是出错,那就是路由规则没学好,看看路由规则文档即决即可

2018-10-23 15:33

这种用法用了快两年了,肯定没有问题的

再多理清一下调用关系就可以解决。 将 #define css() 与 #@css() 理解成为函数定义与调用就可以了

2018-10-23 12:51

jfinal 3.5 需要 java 8 , java 8 有很多重要的特性值得升级

2018-10-22 20:41

@排骨逗逗 jfinal 处在后端,只能管到后端,这种情况肯定是客户端的问题

2018-10-22 20:40

看一下控制台输出的 jfinal action repor 中的 parameter 这一栏是什么数据,根据数据格式选择获取方式

jfinal 3.5 可以使用 getRawData() 获取

2018-10-22 19:45

@排骨逗逗 不会出现,除非你 ios 同时上传了文件,但这种情况被证实为 ios 这端发送的格式不对

因为 jfinal 在服务端是遵守的 http 协议,所以只要你客户端也遵守就不会有问题

2018-10-22 15:55

@錢勢惘導 估计你的 web.xml 文件中头部的文档限制部分配置不对,也可能是 jsp 文件的头部要添加什么指令的引用

JSP 用起来很多冗余,所以 jfinal 才提供 enjoy 引擎来取代 JSP, enjoy 引擎比 JSP 好用得多

2018-10-22 15:54

@錢勢惘導 这个是纯粹的 JSP 的行为, jfinal 是完全不干预的

2018-10-22 14:44

jfinal 对代码质量要求极其严格,极少出现 bug

当然 bug 是一定有的,例如 jfinal 3.5 中的 ClassPathSource.java 中就有一个 bug,这个 bug 通过公众号、社区、qq 群通知过,例如社区的通知在这里:
http://www.jfinal.com/share/979

每次 jfinal 新版本发布都会有详细的 changelog,里面会说明解决了上版本的哪些问题,多数是改进与增强,而不是 bug,changelog 在首页右侧有下载:
http://www.jfinal.com/

2018-10-22 11:54

@錢勢惘導 这个与 jetty 无关,取值要弄对 contexPath 的名称,默认名是 "CONTEXT_PATH",用的时候这样:
${CONTEXT_PATH}

你也可以在配置的时候指定一个更简短的名字:
me.add(new ContextPathHandler("CXT"));

用的时候变这样:
${CXT}

2018-10-22 10:48

手动回滚可以用:
DbKit.getConfig().getConnection().rollback();

还可以使用下面的代码做事务:
Db.tx(() -> {
...
});
在上面的代码中,return false 也会回滚事务