struts2中的Action接收表单传递过来参数的方式

一: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(){

       ifusername.equalsIgnoreCase("aaa")&&password.equals("aaaaaa")){

           return SUCCESS;

       }

       else{

           return ERROR;

       }

    }

}

2.  把表单传递过来的参数封装成一个类,然后调用其中的属性。Action中,定义该类的对象就可以了,jsp页面相应name属性也需要做一下处理,这种方法,在struts开发中是很常用的一种方法!
参数的封装是通过下面这个拦截器完成的。
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

在表单中提交的属性名改为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)

1) 封装数据到Collection 对象 
页面:
<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;
	}
}








  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值