Controller里的 getModel方法
新手容易在Controller里 直接User user=getModel();
然后 user.save();
这个时候如果html那边 被恶意改了一些属性并且post提交就相对比较危险
比如 如果有个money字段, 用户可以新增一个<input name="money" value="999999">
这个时候会被getModel();强行转化并且save
----------------------------------------------------------
我已将getModel()改造为:
/**直接根据input获得Model */
public <T extends Model<?>> T getModel(T model,String fields) {
for(String field:fields.split(",")){
model.set(field,getPara(field));
}
return model;
}
在Controller中可以这样用
User u=getModel(new User(),"name,pass");
u.save();//新增
或者
User u=enhance(XXXXService.class).findById("idvalue");//查询一个user
u=getModel(u,"name,pass");//只更新name和pass字段
u.update();//提交到db
jfinal 在很早期的版本就已提供了极简支持:
1:model.keep(...) 可以在 getModel 以后,指定只保留几个属性,可以一次指定多个,如:model.keep("title", "content")
2:model.remove(...) 也可以移除指定的属性
对于这个问题的探讨,几年前就有了:http://www.oschina.net/question/260040_46570