struts2类型转换续

对于上一篇blog,如果输入多个Point,该如何处理:

1.输入页面如下,假设输入3个Point,其name都相同。

  1. <%@ page contentType="text/html;charset=GBK"%>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <s:form action="converter" method="post">
  4.     <s:textfield name="point" label="point1" />
  5.     <s:textfield name="point" label="point2" />
  6.     <s:textfield name="point" label="point3" />
  7.     <s:textfield name="age" label="age" />
  8.     <s:textfield name="username" label="username" />
  9.     <s:textfield name="date" label="date" />
  10.     <s:submit label="submit" />
  11. </s:form>

2.Coverter类有所改动

  1. package edu.hust.common;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.struts2.util.StrutsTypeConverter;
  6. import edu.hust.bean.Point;
  7. public class Converter extends StrutsTypeConverter {
  8.     @SuppressWarnings("unchecked")
  9.     @Override
  10.     public Object convertFromString(Map context, String[] values, Class toClass) {
  11.         List<Point> pointList = new ArrayList<Point>();
  12.         for (String value : values) {
  13.             Point point = new Point();
  14.             String[] paramValues = value.split(",");
  15.             
  16.             int x = Integer.parseInt(paramValues[0]);
  17.             int y = Integer.parseInt(paramValues[1]);
  18.             
  19.             point.setX(x);
  20.             point.setY(y);
  21.             
  22.             pointList.add(point);
  23.         }
  24.         
  25.         return pointList;
  26.     }
  27.     @SuppressWarnings("unchecked")
  28.     @Override
  29.     public String convertToString(Map context, Object o) {
  30.         List<Point> pointList = (List<Point>) o;
  31.         StringBuilder sb = new StringBuilder();
  32.         for (Point point : pointList) {
  33.             sb = sb.append(point.getX()).append(",").append(point.getY()).append("<br>");
  34.         }
  35.         return sb.toString();
  36.     }
  37. }

3.ConverterAction类只有一处改动

  1. /*
  2.  * 原来是Point, 这里改为List<Point>, 能不能用数组没有尝试过, 但使用List是一种通用的做法
  3.  */
  4. public class ConverterAction extends ActionSupport {
  5.     private List<Point> point;
  6.     public List<Point> getPoint() {
  7.         return point;
  8.     }
  9.     public void setPoint(List<Point> point) {
  10.         this.point = point;
  11.     }
  12. }

其他部分均无改动,这样就实现了多个name相同的表单同时提交的功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值