Struts2模型驱动的一个问题
2015-11-28 15:58
399 查看
模型驱动在Struts2中确实是一个好东西,可以让我们方便的获取表单提交过来的数据。而不再是原来使用的属性驱动。
同时,我们也要了解其原理。实现ActionSupport的子类通过实现ModelDriven接口,并实现getModel方法。
我们的Action一定会有一个private T t;这里的T是指JavaBean实体类。当然我们也会new一个new T
因为返回Action并转发到指定页面,此时Struts会将User对象压入值栈的栈顶。此时栈顶的User对象指向我们new的这个实例。
这里便出问题了,ValueStack中的User对象指向我们一开始模型驱动new的User对象,而我们在show方法中又重新创建了一个User对象,它指向一个新的地址。而我们的
this.user=user;
将this.user指向了我们新建的User对象,此时,ValueStack中的User指向还是原来的,我们ModelDriven一开始new的User对象,所以并没有给ValueStack中的User对象赋值。
这样的话,问题就完美的解决了,但是似乎有一丝不灵活。
同时,我们也要了解其原理。实现ActionSupport的子类通过实现ModelDriven接口,并实现getModel方法。
我们的Action一定会有一个private T t;这里的T是指JavaBean实体类。当然我们也会new一个new T
public class TestAction extends ActionSupport implements ModelDriven<User>{ //待会Struts会将这个对象压入值栈ValueStack private User user=new User(); @Override public User getModel() { return this.user; } }
因为返回Action并转发到指定页面,此时Struts会将User对象压入值栈的栈顶。此时栈顶的User对象指向我们new的这个实例。
public String show(){ //new一个User对象模拟从数据库中查找出来的对象 User user=new User(); user.setUid(123); user.setUsername("bleboz"); //将这个模型驱动对象的引用指向创建出来的对象。 this.user=user; return "show"; }
这里便出问题了,ValueStack中的User对象指向我们一开始模型驱动new的User对象,而我们在show方法中又重新创建了一个User对象,它指向一个新的地址。而我们的
this.user=user;
将this.user指向了我们新建的User对象,此时,ValueStack中的User指向还是原来的,我们ModelDriven一开始new的User对象,所以并没有给ValueStack中的User对象赋值。
具体如何解决
最傻瓜式的办法public String show(){ User user=new User(); user.setUid(123); user.setUsername("bleboz"); //一个一个的赋值。 this.user.setUid(user.getUid()); this.user.setUsername(user.getUsername()); return "show"; }
这样的话,问题就完美的解决了,但是似乎有一丝不灵活。
相关文章推荐
- Java heap space
- java 中常见异常
- java加载文件路径问题
- Spring声明式事务管理(基于注解的方式)
- 用java读写properties文件的代码
- Java注解知识点整理
- eclipse 安装mat插件
- spring核心组件
- eclipse运行android时Console最后提示Done!不运行程序
- Java学习理解路线图
- java实现二叉树的中序遍历和后续遍历
- spring properties 资源文件 方式一
- Java按照某一时区格式化时间
- 对RmiJdbc的二次开发
- Java模拟HTTP的Get和Post请求
- Myeclipse2014黑色主题风格设置
- Java 字符串全面解析
- JAVA通过JDBC连接MySQL数据库提示连接拒绝问题处理
- VS,eclipse联调jni代码
- MyEclipse 使用快捷键