、请求参数的注入
在Struts2框架中,表单的提交的数据会自动注入到与Action对象相对应的属性。它与Spring框架中的IoC的注入原理相同,通过Action对象为属性提供setter方法注入
要求:
jsp中表单的name属性与Action中对应的属性的setter方法对应。要注入属性值的Action对象,必须为该属性提供setXXX()方法,因为Struts2的内部实现是按照JavaBean规范中提供的setter方法,自动为属性注入值
所以一般在Action中注入的属性的属性名与表单对应控件的name值相等,且该属性提供getXXX()、setXXX()方法
域模型DomainModel
我们使用有相同点的属性都喜欢把它封装,这样比较结构化,简单明了。第一种方式注入请求参数在参数过多的情况下可能造成action中的代码过多
将一些属性信息封装成一个实体对象的属性。操作领域对象的方法,在Action对象中引用某一实体对象,并且http请求的参数值可以注入到实体对象的属性上,这种方式i就是struts2提供的DomainModel的方式
注意:使用域模型的时候,jsp中的表单空间的name属性应该与Action中的对象和bean中的属性对应,格式为 对象.属性 ,例如:user.name
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>