现在的位置: 首页 > 综合 > 正文

复选框和Struts2后台交互

2018年06月05日 ⁄ 综合 ⁄ 共 1918字 ⁄ 字号 评论关闭

复选框在web开发中用的非常广泛。

案例:如下图,当前为用户选中的水果为"香蕉",点击按钮,跳转到修改界面进行修改。

跳转到修改界面后要回显用户的选择(香蕉),然后由用户再次进行勾选,如图:

前台界面:

 <body>
  <form action="checBoxAction_test.action" method="post">
   请选择您喜欢的水果:<br>
   <input type="checkbox" name="fruits" value="香蕉"/>香蕉
   <input type="checkbox" name="fruits" value="雪梨"/>雪梨
   <input type="checkbox" name="fruits" value="西瓜"/>西瓜</br>
   
   <input type="submit" value="跳转到修改界面进行修改">
   </form>
  </body>

后台ChecBoxAction.java代码:

public class ChecBoxAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	/*前台通过复选框选中的水果名称*/
	private String fruits;

	public String getFruits() {
		return fruits;
	}

	public void setFruits(String fruits) {
		this.fruits = fruits;
	}
	
	public String test(){
		
		/*没去除空格之前*/
		System.out.println(this.getFruits());
		
		/*获取从前台穿过来的字符串(注:这里必须去除空格,因为传过来的每个值之间除了有逗号分隔符之外还都有空格,但是通过trim()的方式是去不掉空格的)*/
		//String fruitStr = this.getFruits().trim();
		
		/*必须如是这般才能去掉空格*/
		String fruitStr = this.getFruits().replaceAll(" ", "");
		System.out.println("去除空格之后的字符串:" + fruitStr);
		
		
		/*把字符串通过逗号分隔为一个字符串数组*/
		String[] fruit = fruitStr.split(",");
		/*遍历所有的值,把它们存到一个集合中*/
		List<String> myFruits = new ArrayList<String>();
		
		for(int i=0; i<fruit.length; i++){
			
			myFruits.add(fruit[i]);
		}
		/*把用户选中的复选框存到Map中发送到前台*/
		ActionContext.getContext().put("myFruits", myFruits);
		
		/*模拟从数据库中查出所有的值,在前台展示,然后和用户选中的进行匹配*/
		List<String> list = new ArrayList<String>();
		list.add("香蕉");
		list.add("雪梨");
		list.add("西瓜");
		ActionContext.getContext().put("list", list);
		
		return this.SUCCESS;
	}
	
}

注:复选框向后台传值,传过去的是一个字符串,且带有空格,所以必须去除空格,但是用trim()方法是去除不了的,使用trim()方法之后的效果,如下:

如图,毫无效果!但是,我们可以使用replaceAll()方法,去替代空格,效果如下:

另外为了在修改界面展示所有的复选框(水果),我们在Action中模拟从数据库中取出所有的值,然后和用户选择的复选框一起传到修改界面。

修改界面:

<body>
  <form action="checBoxAction_test.action" method="post">
   您选择的水果:<br>
   <c:forEach items="${list}" var="list">
   
   	<input type="checkbox" value="${list}" 
   		<c:forEach items="${myFruits}" var="fr">
   			${fr == list ? "checked" : ""}
   		</c:forEach> 
   	/>${list}
   	
   </c:forEach>
   
  </br> <input type="submit" value="修改"/>
   </form>
  </body>

注:修改界面比较复杂,首先是遍历所有复选框(水果),在每个浮选中又使用一个forEach循环,去遍历用户选择的所有复选框(水果),然后通过三目运算符去判断当前复选框是否被用户选中,如果匹配,就勾选。

抱歉!评论已关闭.