struts2使用modeldriven执行转向更新页面是直接将getByID()获取到的值赋值给model数据不回显
来源:互联网 发布:调整以优化性能选哪个 编辑:程序博客网 时间:2024/06/05 02:28
假设我们要更新一个实体对象,那么第一步首先是打开更新界面,请看下述模拟打开更新界面的代码:
public class UserAction implements ModelDriven{
private User user;
@Override
public Object getModel() {
if(user == null){
user = new User();
//user.setUsername("这是原来的User对象");
}
return user;
}
public String updateInput(){
//根据ID,查询数据库,得到User对象
user = new UserManager().findUserById(user.getId());
return "update_input";
}
上述代码中,new UserManager().findUserById(user.getId());这一行,将从数据库中查询相应的记录,同时转换为User对象返回。而return “update_input”;将转向更新显示页面。
更新页面如下:
<form action="test/user.action" method="post">
<input type="hidden" name="method:update">
id:<input type="text" name="id" value="<s:property value="id"/>"> <br/>
username:<input type="text" name="username" value="<s:property value="username"/>"><br/>
password:<input type="text" name="password" value="<s:property value="password"/>"><br/>
age:<input type="text" name="age" value="<s:property value="age"/>"> <br/>
address:<input type="text" name="address" value="<s:property value="address"/>"><br/>
<input type="submit" name="submit" value="更新用户">
</form> <br/>
上述代码运行起来之后,你在更新界面上将看不到数据(id属性有值,其它属性无显示)。关键的原因是在执行到updateInput之前,user对象(在getMode()方法中创建的对象)被压到ValueStack中,这时候,UserAction和ValueStack都指向同一个user对象;但紧接着,UserAction中的user被一个新的user对象覆盖,这时候,UserAction和ValueStack不再指向同一个user对象!ValueStack中是旧的user对象,而UserAction中是新的user对象!我们在JSP中,直接通过username/address等直接访问,当然是要访问ValueStack中的旧user对象,所以它们的属性都是空的(id属性除外)!
理解上述问题很重要,当你理解了问题,那么问题的解决方法就可以有很多了:
比如,你可以把新对象的属性拷贝到旧对象上;比如,你可以先把旧对象从ValueStack中移除,然后再把新对象压入ValueStack等……
在最新的struts2版本中,ModelDrivenInterceptor提供了一个配置参数:refreshModelBeforeResult,只要将它定义为true,上述问题就被解决了!struts2的解决方案就是:先把旧的model对象从ValueStack中移除,然后再把新的model对象压入ValueStack!
- struts2使用modeldriven执行转向更新页面是直接将getByID()获取到的值赋值给model数据不回显
- Struts2 将页面参数赋值给DTO
- 直接给vue数组赋值,无法渲染到页面
- 将model的数据绑定给控件
- Struts2中ModelDriven的使用
- Struts2之ModelDriven的使用
- Struts2之ModelDriven的使用
- Struts2之ModelDriven的使用
- Struts2之ModelDriven的使用
- Struts2之ModelDriven的使用
- struts2之ModelDriven的使用
- 获取Iframe页面高度,并将高度赋值给Iframe
- Asp.net - Razor - 将Model中变量的值赋值给Javascript变量
- [Excel VBA] 在VBA中如何将SQL得到的数据直接赋值到数组?
- iframe给主页面元素赋值【使用jquery获取页面数据】
- iframe给主页面元素赋值【使用jquery获取页面数据】 .
- springMVC:将controller中Model数据传递到jsp页面
- 如何将数据添加到自定义的DataTable中并赋值给list实现打印功能。
- Search for a Range
- Nginx安装、配置及使用总结
- 关键字register static const #define用法总结
- caffe网络结构可视化
- Android中AIDL的使用(一)
- struts2使用modeldriven执行转向更新页面是直接将getByID()获取到的值赋值给model数据不回显
- ibatis demo01
- 面试题 22: 栈的压入,弹出序列
- TCP协议中的定时器
- 【Android】android studio 一直卡在Gradle:Build Running的解决办法
- ubuntu更换国内软件源,附上几个国内软件源
- 四元数姿态解算中的地磁计融合解读
- leetcode:Counting Bits
- OpenGL环境搭建