修正JFinal getModel的一个BUG

blob.png

评论区

JFinal

2016-07-20 21:32

从 !paraValue.toLowerCase().equals("null") 这个条件来说,"null" 有可能是正常的字符串,是允许 set 到 model 中去的。前些日子还有个老外故意将自己的名字改成 "null" 引发了住酒店等业务系统的bug,原因就是有不少系统将 "null" 字符串当成了 null 常量。 麻烦告知一下具体是什么问题? 如果有异常抛出,贴出一下具体的异常,感谢支持 jfinal 社区发展

Andydmx

2016-07-27 11:29

@JFinal 是这样的,数据库也是PostgreSQL,主键是bigSerial,就是自动增加的长整数。添加一篇文章的时候,为了区分是新加还是编辑,在页面上有个隐藏字段,ID。在服务器端取到的值是null,通过Model.getModel取到的ID是null,保存数据库的时候,抛出主键异常。

我认为,在页面上,""和null都表示空,在WEB程序中,有的时候,还需要特出处理字符串“null”值。所以,在这里就认为,如果是"null"字符串,也认为是没有值。欢迎就这个问题讨论。

你说的问题确实存在,对于界面模型,可能他输入的字符串就是null。。。。。。。

这个地方或许真的值得商榷。

感谢JFinal作者。

JFinal

2016-07-27 11:45

@Andydmx 严格来说 "null" 是字符串,null 是常量,这个是完全不同的概念,如果处理不当会出奇奇怪怪的问题。为了区分新加还是编辑,其实可以很简单地通过 id 是否为 null来判断一下,如果是 null 调用一下 model.remove("id") 然后再 model.save(),如果为非 null,直接 model.update() 即可

Andydmx

2016-07-27 21:44

@JFinal 感谢JFinal作者,谢谢。

jiulongting

2016-08-02 09:26

ddddddddddd

Andydmx

2016-08-08 20:55

com.jfinal.core.Injector.java: injectModel(...)
Line 127:

try {
String[] paraValueArray = entry.getValue();
String paraValue = (paraValueArray != null && paraValueArray.length > 0) ? paraValueArray[0] : null;

if (StrKit.notBlank(paraValue)){
model.set(attrName, TypeConverter.convert(colType, paraValue));
}
} catch (Exception e) {
if (skipConvertError == false) {
throw new RuntimeException("Can not convert parameter: " + paraName, e);
}
}

热门分享

扫码入社