JFinal

登录 注册

调用​Model.update时,希望指定字段不更新。

调用Model.update时,希望指定字段不更新。

比如:Model.update("status,addTime,addUserId")

这样更新时希望跳过status,addTime,addUserId三个字段。

评论

  • 04-11 16:15
    Model.remove("status","addTime","addUserId")
  • 04-11 16:21
    @錢勢惘導 谢谢!还有个问题。这样移除后,getStr("status")就获取不到值了?
  • 04-11 16:24
    Model.put() 方法是不会更新 到数据库的。
    Model.set() 的字段会被标记,跟新时会写入数据库
  • 04-11 16:35
    @杜福忠 User user = getBean(User .class,"");
    这个是使用的set吧。就是一些service里方法希望控制一些字段不能随意修改。
    否则可能有漏洞,前台通过F12改了不能改的值。
  • 04-11 16:48
    这样的话, User user = getBean(User .class,"");
    service里用新建对象 new User()._setAttrs(user).remove(xxxx)或者keep保留些参数
  • 04-11 16:55
    /***
    * 指定字段不更新
    * @param removeModifyFlag 例如:"status,addTime,addUserId"
    * @return
    */
    public boolean update(String removeModifyFlag){
    removeModifyFlag = removeModifyFlag == null ? "" : removeModifyFlag;
    Set modifyFlag = getModifyFlag();
    Set tempSet = new HashSet();
    String strs [] = removeModifyFlag.split(",");
    for (String str : strs) {
    if(modifyFlag.contains(str)){
    tempSet.add(str);
    modifyFlag.remove(str);
    }
    }
    boolean result = this.update();
    modifyFlag.remove(tempSet);
    return result;
    }
  • 04-11 16:55
    @杜福忠 getModifyFlag()关键就是这个方法不可以继承很无语
  • 04-11 16:59
    @perlin remove了就拿不到了
  • 04-11 16:59
    @杜福忠 谢谢!这种方法还可以。
  • 04-11 17:27
    /***
    * 指定字段不更新. 表中没有addTime字段也不会报错,会直接忽略。
    * @param removeModifyFlag 例如:"status,addTime,addUserId"
    * @return
    */
    public boolean update(String removeModifyAttrs){
    Table table = TableMapping.me().getTable(getUsefulClass());
    removeModifyAttrs = removeModifyAttrs == null ? "" : removeModifyAttrs;
    Map tempAttrs = new HashMap();
    String removeModifyAttrArr [] = removeModifyAttrs.split(",");
    for (String removeAttr : removeModifyAttrArr) {
    if (table.hasColumnLabel(removeAttr)) {
    Object objVal = this.get(removeAttr);
    this.remove(removeAttr);
    tempAttrs.put(removeAttr, objVal);
    }
    }
    boolean result = this.update();
    this._setAttrs(tempAttrs);
    return result;
    }
  • 04-11 17:28
    谢谢大家了!通过继承Model类实现了。还是这样用着方便。
  • 04-11 22:23
    补充一下,getModifyFlag() 方法可以通过下面方法实现同样的效果:
    CPI.getModifyFlag(...);

    再者 model 中还有 keep、remove 方法可以决定数据的去留
  • 发送