jfinal model put(key,val)保存不成功

龙影 发布于 2015/03/08 17:06
阅读 1K+
收藏 0

@jfinal  波总,给看看 JFinal 为什么不能save和update?因为前端传过来一些多余的json,所以需要使用put。是使用的是1.9的版本。

也未有包异常。debug也看到了将值都传给了Model了。

采用

jfinal在反射调用方法

Map<String,Object> attrs=(Map<String,Object>)req.getData();
      String id=(String) attrs.get("id");
      if(StringUtils.isEmpty(id)){
        String password=(String)attrs.get("password");
        if(StringUtils.isEmpty(password)){
          password="123456";
        }
        attrs.put("password", MD5.getMD5ofStr(password));
      }
      User dao=User.dao; for(String key:attrs.keySet()){
              dao.put(key, attrs.get(key));
            } if (StringUtils.isEmpty((String) attrs.get("id"))) {
              dao.set("id",IdGenerater.me.getId());
                dao.save();
            } else {
                dao.update();
            }
加载中
1
Dreampie
Dreampie

put 的值没有  设置到updateflag  不会更新 

龙影
龙影
public M set(String attr, Object value) { if (getTable().hasColumnLabel(attr)) { attrs.put(attr, value); getModifyFlag().add(attr); // Add modify flag, update() need this flag. return (M...
1
JFinal
JFinal

     Model.set(...) 与 Model.put(...) 的用途不一样,前者用于 set 进去真正的属性值进去,便于对数据库进行操作,后者用于 put 非属性进去,便于方便放入数据并在页面显示出来。

    为了避免开发者在 Model.set(...) 进手误写错属性名,所以 set(...) 时对属性名的正确性进行检测,从而避免出现这类 bug,提升开发者效率。

    唯一可以考虑改变的地方是 Model.put(...) 方法进行判断,如果是属性则让其实际等同于调用set(...) 方法。但这样改变使 put(...) 方法不再纯粹,不是极简的设计原则。

    所以暂时建议在相关 Model 中重写 put 或者新建一个 putOrSet(...) 方法来解决,代码大致是:if (getTable().hasColumnLabel(key)) set(key, value); else put(key, value);

0
龙影
龙影

@王仁辉(java)  @Jfinal

public M set(String attr, Object value) {
		if (getTable().hasColumnLabel(attr)) {
			attrs.put(attr, value);
			getModifyFlag().add(attr);	// Add modify flag, update() need this flag.
			return (M)this;
		}
		throw new ActiveRecordException("The attribute name is not exists: " + attr);
	}



是put和set的区别。

但是由于要处理很多不确定的 所以需要全部放入Model中

请问如何解决这个问题?

0
龙影
龙影

使用set却直接报错?

The attribute name is not exists

很不人性化啊,之前我修改了下1.6的版本的代码跳过去了 看来也只能这么处理了

@jfinal 

Dreampie
Dreampie
https://github.com/Dreampie/resty/blob/master/resty-orm-sql/src/main/java/cn/dreampie/orm/Base.java 我在resty的put里判断了是不是属性 你可以覆盖jfinal的put方法
0
干死it
干死it
回答的仔细
返回顶部
顶部