2
回答
JFinal通过getmodel获取前台值的问题

后台log:

Controller  : com.suirui.platform.enterprise.ActivityManagerController.(ActivityManagerController.java:1)
Method      : saveActivity
Parameter   : activeinfo.activeName=活动名称  activeinfo.activeType=1  activeinfo.activeContent=活动内容


后台代码:ActiveInfo activeInfo = getModel(ActiveInfo.class);
            String activeName = getPara("activeName");
            String activeType = getPara("activeType");
            String activeContent = getPara("activeContent");

上面方法没法获取到值,只有用getPara("activeinfo.activeName")才可以获取到值,

以前有个项目可以直接getmodel把所有值获取到,这个项目不知道怎么回事@JFinal

举报
共有2个答案 最后回答: 3年前

      假定有一个 Model 为ActiveInfo,并该 Model 所对应的数据表有 activeName 属性,那么 getModel 要正常工作需要注意几点:

1:页面中input 域的 name 采用 modelName.attrName  的形式,其中 modelName 为 ActiveInfo 类名的首字母变小写,即为:activeInfo,其下的属性名要完全保持一致,即为:activeInfo.activeName。最终在页面的形式是:<input name="activeInfo.activeName" ...>要注意大小写。

2:如果想打破上面的规则,可以让 getModel 指定 modelName,即为:getModel(ActiveInfo.class, "otherName"),页面可以变为:<input name="otherName.activeName" ...> 注意仍然只能改变前缀部分,属性名称 activeName 不能改变。

3:model 需要在 ActiveRecordPugin 中映射, arp.addMapping("active_info", ActiveInfo.class)

4:如果 Model 不在 arp 中注册,也可以是传统的 java bean。jfinal 支持传统 java bean 用于 getModel(...)

    仔细看这一行输出:Parameter : activeinfo.activeName=活动名称 activeinfo.activeType=1 activeinfo.activeContent=活动内容,已经很名确参数名称是 "activeinfo.activeName" 了,getPara("activeName") 必然获取不到数据,因为本身这个参数就不存在。

   既然 ActiveInfo activeInfo = getModel(ActiveInfo.class); 已经获取到了数据,为何不直接使用呢: activeInfo.getStr("activeName"); 。 为何还要多此一举再次用 getPara(...) 去获取。

    仔细看一下 jfinal 手册,掌握基本用法,在此下载:http://www.jfinal.com

--- 共有 3 条评论 ---
狗修金萨玛多谢~了解了! 3年前 回复
上下左右阿门回复 @狗修金萨玛 : 你确定你映射 的 activeinfo model 不是 activeInfo ? 大小写 3年前 回复
狗修金萨玛不好意思我没说清楚,主要是getmodel这种方式没获取到值,不得已才用的getPara,想知道getmodel在什么条件下可以获取到值,以前的那个项目就是直接用getmodel把所有值获取了,爽死我们了,但是这个项目不知道为什么获取不到. 3年前 回复
顶部