struts请求参数注入的三种方式
1、请求参数的注入
在Struts2框架中,表单的提交的数据会自动注入到与Action对象相对应的属性。它与Spring框架中的IoC的注入原理相同,通过Action对象为属性提供setter方法注入要求:
jsp中表单的name属性与Action中对应的属性的setter方法对应。要注入属性值的Action对象,必须为该属性提供setXXX()方法,因为Struts2的内部实现是按照JavaBean规范中提供的setter方法,自动为属性注入值。所以一般在Action中注入的属性的属性名与表单对应控件的name值相等,且该属性提供setXXX()方法
2、域模型DomainModel
第一种方式注入请求参数在参数过多的情况下可能造成action中的代码过多将一些属性信息封装成一个实体对象的属性。操作领域对象的方法,在Action对象中引用某一实体对象,并且http请求的参数值可以注入到实体对象的属性上,这种方式i就是struts2提供的DomainModel的方式。
public Class User{ private String name; private String password; private int age; public void setName(String name){this.name=name;} public String getName(){return name;} public void setPassword(String password){this.password=password;} public String getPassword(){return password;} public void setAge(int age){this.age=age;} public int getAge(){return age;} } public Class UserAction extends ActionSupport{ private User user; public void setUser(User user){this.user=user;} public User getUser(){return User;}
public String execute() throws Exception{ return "success"; } } <body> <s:form action="userAction" method="post"> <s:textfield name="user.name" label="用户名"/> <s:password name="user.password" label="密码" /> <s:textfield name="user.age" label="年龄"/> <s:submit value="注册"/> </s:form> </body>
3、驱动模型ModelDriven
Struts2的API中,提供了一个名为ModelDriven的接口,Action对象可以通过实现此接口获取指定的实体对象,获取的方式是实现ModelDriven提供的getModel()方法进行获取。
注意:驱动模型必须实例化对象类型的那个成员变量,否则空指针错误
public Class User{ private String name; private String password; private int age; public void setName(String name){this.name=name;} public String getName(){return name;} public void setPassword(String password){this.password=password;} public String getPassword(){return password;} public void setAge(int age){this.age=age;} public int getAge(){return age;} } public Class UserAction extends ActionSupport implements ModelDriven{ private User user; @Override public User getModel(){ return this.user; } public String execute() throws Exception{ return "success"; } } <body> <s:form action="userAction" method="post"> <s:textfield name="name" label="用户名"/> <s:password name="password" label="密码" /> <s:textfield name="age" label="年龄"/> <s:submit value="注册"/> </s:form> </body>

浙公网安备 33010602011771号