struts 模型驱动

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

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

写法 例子:

前端代码

1 <form action="${pageContext.request.contextPath }/user_add" name="form_">
2         用户名:<input type="text" name="user.userName" />  <br>
3             密码:<input type="text" name="user.pwd" /><br/>
4             <input type="submit" value="提交">
5     </form>

后台代码

复制代码
 1 //----------------user----------实体类------------------
 2 package test.a_usertest;
 3 public class User {
 4     private String userName;
 5     private String pwd;
 6     public String getUserName() {
 7         return userName;
 8     }
 9     public void setUserName(String userName) {
10         this.userName = userName;
11     }
12     public String getPwd() {
13         return pwd;
14     }
15     public void setPwd(String pwd) {
16         this.pwd = pwd;
17     }
18 }
19 //--------action---------------------------------
20 package test.a_usertest;
21 
22 import java.util.ArrayList;
23 import java.util.List;
24 
25 import com.opensymphony.xwork2.ActionSupport;
26 import com.opensymphony.xwork2.ModelDriven;
27 
28 public class UserAction extends ActionSupport implements ModelDriven<User>{
29 
30     private User user = new User();
31     public User getUser() {
32         return user;
33     }
34     public void setUser(User user) {
35         this.user = user;
36     }
37     public User getModel() {
38         return this.user;
39     }
40     public String add(){
41         List<Object> list = new ArrayList<Object>();
42         list.add(user);//打个断点在这里可以发现,此时user.userName 、user.pwd的值为前端传过来的值,也就是页面中的this.user对象自动被封装了
43         return SUCCESS;
44     }
45 }
复制代码

 

posted @   酒香逢  阅读(603)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示