struts2-ModelDriven模型驱动

本文详细介绍了在使用Struts作为前端的企业级应用程序时,如何通过ModelDriven拦截器实现动作与模型的清晰隔开,并具体演示了如何在CustomerAction类中实现这一过程。包括模型类构造器的必要性、模型驱动的目的以及两种实现方法的原理与操作。

把动作和模型隔开

  在使用 Struts 作为前端的企业级应用程序时把动作和模型清晰地隔离开是有必要的: 有些动作类不代表任何模型对象, 它们的功能仅限于提供图文显示服务

ModelDriven 拦截器

情景: 有一个用来处理客户的 CustomerAction 类, 该动作类实现了 ModelDriven 接口.

 

当用户触发CustomerAction 动作时, ModelDriven 拦截器将调用相关CustomerAction 对象的 getModel() 方法, 并把返回的模型(Customer实例)压入到 ValueStack 栈. 接下来 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 因为此时 ValueStack 栈的栈顶元素是刚被压入的模型(Product)对象, 所以该模型将被填充. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象.

 

一个模型类必须有一个不带任何参数的构造器.

 

  模型驱动的目的是将对象放入到值栈顶,由struts2中的模型驱动拦截器处理

1 public class UserAction extends ActionSupport implements ModelDriven<CustomAction> {
2     
3     public CustomAction getModel() {
4         return user;
5     }
6 }

底层代码:<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>  

struts2标签自动回显

  方法一:

 1 public String edit(){
 2     //该对象是从数据库查询出来的
 3     CustomAction newUser = new CustomAction();
 4     newUser.setUsername("zhang");
 5     newUser.setTel("13600000000");
 6     newUser.setDes("xxxxx");
 7 }
 8 方法一:
 9     user.setUsername(newUser.getUsername());
10     user.setTel(newUser.getTel());
11     user.setDes(newUser.getDes());
12 }
13 方法二:
14     //获取栈
15     ValueStack valueStack = ServletActionContext.getContext().getValueStack();
16     //删除栈顶的user对象
17     valueStack.pop();
18     //增加新的对象到栈顶newUser
19     valueStack.push(newUser);
20 }

 

-方式二原理

 

转载于:https://www.cnblogs.com/hacket/archive/2013/05/22/3093318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值