Struts2中jsp的form值如何映射为Action中的List<Map<String,String>>对象?

发布于 2021-11-30 08:59:57 字数 848 浏览 846 评论 8

现在有一个需求:利用Struts2的特性,将页面的from表单中的值直接映射成为List<Map<String,String>>对象

已知可以实现的有List<Object>,Map<String,String>,但是List<Map<String,String>>就是实现不了

写法如下:

/**Action中定义的对象**/
private Map<String, String> map;
private List<String> list;
private List<Map<String, String>> listMap;
<!-- jsp页面中的form -->
<!-- 这样可以直接映射到map对象中 -->
姓名:<input type="text" name="map['name']"/></br>
年龄:<input type="text" name="map['age']"/></br>
<!-- 这样可以直接映射到list对象中 -->
爱好:<input type="text" name="list" /><input type="text" name="list" /><input type="text" name="list" /></br>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

月亮是我掰弯的 2021-12-01 02:19:44

我这里来补充完整吧,搞了一上午,要自定义一个map,如

public class MyMap<K, V> extends LinkedHashMap {}

然后action中:private List<MyMap<String, Object>> paramList; set /get 省略

页面:

name="paramList[0].COL_NO"

name="paramList[1].COL_NO"

xwork-conversion.properties 配置(必需放在全局配置里):

com.more.mes.common.model.dto.MyMap=com.more.mes.common.method.ListMapTypeConverter

package com.more.mes.common.method;

import java.text.DateFormat;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.util.StrutsTypeConverter;

/**
 * @author liudg
 * 
 */
public class ListMapTypeConverter extends StrutsTypeConverter {

	private final Logger log = Logger.getLogger(this.getClass());

	/**
	 * 
	 */
	public ListMapTypeConverter() {
	}

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		try {
			if (null == values || values[0] == null || values[0].trim().equals(""))
				return null;
			for (DateFormat format : DateTypeConverter.ACCEPT_DATE_FORMATS) {
				try {
					return format.parse(values[0]);
				} catch (Exception e) {
					// e.printStackTrace();
					continue;
				}
			}
			return values[0];
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public String convertToString(Map context, Object o) {
		log.info(context + " convertToString===" + o);
		return o.toString();
	}

}

惜醉颜 2021-12-01 01:50:01

终于可以了,多层嵌套的对象需要在全局转换器里定义转换类

终止放荡 2021-12-01 01:11:44

自定义类型转换不成功,似乎对于list都没进入自定义转换的流程,不知道是哪里写错了,求解

// action
public class AddUAction {
	private List<Map<String,String>> birdate;
         // 省略get、set
...
// jsp表单
...
<form action="teMan.action" method="post">
  <input name="birdate[0]['id1']" value="2001-02-05" />
  <input name="birdate[0]['id2']" value="2301-02-05" />
  <input class="button" type="submit" value="Test" />
</form>
// 转换类
public class MapConverter extends StrutsTypeConverter {
  @Override
  public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    // TODO Auto-generated method stub
    for (int i=0;i<arg1.length;i++) {
      System.out.println(arg1[1]);
    }
    return null;
  }
...
}
// 规则文件AddUAction-conversion.properties
birdate=com.MapConverter

 

路还长,别太狂 2021-12-01 01:07:02

我目前试着是只能用bean,不能用map

冷清清 2021-11-30 18:44:37

同问,我也碰到这个问题,是在做编辑数据的时候会用到,我想先在页面上添加多条数据,然后一次性提交到后台执行插入,类似这样:

...
values[0]['id']='line0_id';
values[0]['name']='line0_name';
values[1]['id']='line1_id';
values[1]['name']='line1_name';
...

后台通过List<Map<String,String>>进行接收,可是收不到。。。

至于为什么要用Map<String, String>而不用具体的bean,是因为还想将这个过程做成通用的类,打算接收后再转给具体的类执行解析和插入

目前考虑可能会使用到自定义解析的方式来做

离去的眼神 2021-11-30 18:00:57

你举个listmap的例子.额.什么情况表单还有这种形式的额 ...我是没见过..

清风夜微凉 2021-11-30 15:43:36

你要直接赋值给list里面的map?额...这个...疯了.

醉生梦死 2021-11-30 13:13:03

但是List<Map<String,String>>页面可以用OGNL操作,我觉得理论上form可以映射值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文