一:action中接收表单传递过来的简单的参数(3种方式)
1. 在Action类中定义表单属性,两者属性名称必须一致。提供setter即可接收到表单传过来的参数。这种接收参数的方法,方便简单,但是结构性不是很好,且当表单传递来的参数很多的时候,整个Action类中充斥着setter方法,程序结构不是很美观。(只需要提供属性的setter方法就可以,不需要getter方法。)
JSP中的表单
<form action="login.action" method="post">
用户名:<input type="text" name="username"/> <br/>
密码: <input type="password" name="password" /> <br/>
<input type="submit" value="登陆" />
</form>
Action中的属性
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute(){
if( username.equalsIgnoreCase("aaa")&&password.equals("aaaaaa")){
return SUCCESS;
}
else{
return ERROR;
}
}
}
2. 把表单传递过来的参数封装成一个类,然后调用其中的属性。Action中,定义该类的对象就可以了,jsp页面相应name属性也需要做一下处理,这种方法,在struts开发中是很常用的一种方法!在表单中提交的属性名改为user.username
<form action="login.action" method="post">
用户名:<input type="text" name="user.username"/> <br/>
密码: <input type="password" name="user.password" /> <br/>
<input type="submit" value="登陆" />
</form>
LoginAction中的属性改为user
public class LoginAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
if(user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals("aaaaaa")){
return SUCCESS;
}
else{
return ERROR;
}
}
}
3. 使用Struts2中的ModelDriven数据模式。首先Action类必须实现ModelDriven接口,同样把表单传来的数据封装起来,Action类中必须实例化该对象,并且要重写getModel()方法。表单传来的参数封装在users对象中
表单属性名不需要加上引用user对象,直接传参数名。
Action类要实现一个泛型接口,前台表单与1相同
public class LoginAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public User getModel() {
return user;
}
public String execute(){
if(user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals("aaaaaa")){
return SUCCESS;
}
else{
return ERROR;
}
}
}
下图为图例描述:
二:表单中复杂内容参数封装至action中(集合类型 Collection 、 Map)
<form action="${pageContext.request.contextPath }/product.action" method="post">
产品名称 <input type="text" name="products[0].name" /><br/>
价格 <input type="text" name="products[0].price" /><br/>
产品名称 <input type="text" name="products[1].name" /><br/>
价格 <input type="text" name="products[1].price" /><br/>
<input type="submit" value="添加" />
</form>
action中定义List<Product> products 这个属性,并提供getter、setter方法。
public class ProductAction extends ActionSupport {
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
@Override
public String execute() throws Exception {
System.out.println(products);
return NONE;
}
}
2) 封装数据到Map 对象
<form action="${pageContext.request.contextPath }/product2.action" method="post">
<!-- 第一个map的key为one {one:productVo{name,price}} -->
产品名称 <input type="text" name="map['one'].name" /><br/>
价格 <input type="text" name="map['one'].price" /><br/>
<!-- 第二个map的key为one {two:productVo{name,price}} -->
产品名称 <input type="text" name="map['two'].name" /><br/>
价格 <input type="text" name="map[two].price" /><br/>
<input type="submit" value="添加" />
</form>
action:
public class ProductAction2 extends ActionSupport {
private Map<String, Product> map;
public Map<String, Product> getMap() {
return map;
}
public void setMap(Map<String, Product> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
System.out.println(map);
return NONE;
}
}