model中的set(String attr, Object value)方法为什么不能表中字段没有时跳过该字段赋值,

超凡程序猿 发布于 2015/07/21 11:49
阅读 246
收藏 0

@JFinal 你好,想跟你请教个问题:使用Model中的set(String attr, Object value)方法时在表中没有该字段时会抛出异常,也就是一个map中可能有10个字段,而接收的类只有其中5个字段,用setAttrs时调用set方法时会直接抛出异常,而我想的是跳过该字段赋值,直接进行下一个字段的赋值呢,这个有方法可以解决吗

以下是问题补充:

@超凡程序猿:package com.yiyi.model; import com.jfinal.plugin.activerecord.Model; import com.jfinal.plugin.activerecord.Table; import com.jfinal.plugin.activerecord.TableMapping; @SuppressWarnings({ "rawtypes", "serial" }) public class Organization<O extends Organization> extends Model<Organization> { private Table getTable() { return TableMapping.me().getTable(getUsefulClass()); } @SuppressWarnings("unchecked") private Class<? extends Model> getUsefulClass() { Class c = getClass(); return c.getName().indexOf("EnhancerByCGLIB") == -1 ? c : c .getSuperclass(); // com.demo.blog.Blog$$EnhancerByCGLIB$$69a17158 } @Override public Organization set(String attr, Object value) { if (getTable().hasColumnLabel(attr)) { return super.set(attr, value); } return this; } } (2015/07/21 11:59)
@超凡程序猿:我用机构类去继承model类,然后再把model里面的getTable和getUsefulClass两个方法拿出来卸载机构类中,然后在机构类中重写set方法,在赋值时就对赋值参数进行判断,如果存在再执行model的set方法,这样虽然解决了我的问题,但是我就怕这会有另外的bug,不敢轻易使用?请问这会有什么问题吗 (2015/07/21 12:03)
加载中
0
JFinal
JFinal

   Model.set(attr, valuve) 方法专门用来设置该 model 应该有的属性值,当属性名不存在时抛出异常是为了避免开发者手误写错属性名从而造成难以察觉的 bug。

   当需要往 Model 中存入非属性值时,直接使用 Model.put(key, value) 即可打完收工。

超凡程序猿
超凡程序猿
回复 @糊搞 : 怎么截获异常呢,那个不是在model源码中吗
糊搞
回复 @超凡程序猿 : 但是put的字段不用于更新数据库,这一点要注意
糊搞
回复 @超凡程序猿 : set时抛异常,你可以在截获异常时用put。或者全用put,这样就没有异常产生了
超凡程序猿
超凡程序猿
比如说A类里面有a1,a2,a3的属性,对应a表, B类里面有b1,b2,b3属性,对应b表,C类无对应表,三个类都继承model,在登录时,我把A和B的属性值全部put到C类中去保存到session中,在之后方法中使用session时直接获取出,然后用A去接收时,只获取A有的属性值,B去获取时,只获取B有的值,然后进行操作。
超凡程序猿
超凡程序猿
如果用put方式,我就没有必要强转了,直接可以获取里面的东西,我就想set的时候能够只根据user类所对应的表有的字段赋值,其余的字段不进行赋值
下一页
0
糊搞

引用来自“JFinal”的评论

   Model.set(attr, valuve) 方法专门用来设置该 model 应该有的属性值,当属性名不存在时抛出异常是为了避免开发者手误写错属性名从而造成难以察觉的 bug。

   当需要往 Model 中存入非属性值时,直接使用 Model.put(key, value) 即可打完收工。

try{
    model.set(字段, 值);
} catch (ActiveRecordException e){
    model.put(属性, 值);
}



超凡程序猿
超凡程序猿
ok明白该怎么解决了
返回顶部
顶部