对于上一篇blog,如果输入多个Point,该如何处理:
1.输入页面如下,假设输入3个Point,其name都相同。
- <%@ page contentType="text/html;charset=GBK"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:form action="converter" method="post">
- <s:textfield name="point" label="point1" />
- <s:textfield name="point" label="point2" />
- <s:textfield name="point" label="point3" />
- <s:textfield name="age" label="age" />
- <s:textfield name="username" label="username" />
- <s:textfield name="date" label="date" />
- <s:submit label="submit" />
- </s:form>
2.Coverter类有所改动
- package edu.hust.common;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.apache.struts2.util.StrutsTypeConverter;
- import edu.hust.bean.Point;
- public class Converter extends StrutsTypeConverter {
- @SuppressWarnings("unchecked")
- @Override
- public Object convertFromString(Map context, String[] values, Class toClass) {
- List<Point> pointList = new ArrayList<Point>();
- for (String value : values) {
- Point point = new Point();
- String[] paramValues = value.split(",");
- int x = Integer.parseInt(paramValues[0]);
- int y = Integer.parseInt(paramValues[1]);
- point.setX(x);
- point.setY(y);
- pointList.add(point);
- }
- return pointList;
- }
- @SuppressWarnings("unchecked")
- @Override
- public String convertToString(Map context, Object o) {
- List<Point> pointList = (List<Point>) o;
- StringBuilder sb = new StringBuilder();
- for (Point point : pointList) {
- sb = sb.append(point.getX()).append(",").append(point.getY()).append("<br>");
- }
- return sb.toString();
- }
- }
3.ConverterAction类只有一处改动
- /*
- * 原来是Point, 这里改为List<Point>, 能不能用数组没有尝试过, 但使用List是一种通用的做法
- */
- public class ConverterAction extends ActionSupport {
- private List<Point> point;
- public List<Point> getPoint() {
- return point;
- }
- public void setPoint(List<Point> point) {
- this.point = point;
- }
- }
其他部分均无改动,这样就实现了多个name相同的表单同时提交的功能。