使用<form:hidden> </form:hidden>将Map值传递给Spring MVC控制器

时间:2014-03-11 14:56:29

标签: java spring spring-mvc

在提交页面时,我需要做一些处理并将一些数据发送到控制器。我觉得'Map'适合我传递数据的要求。这就是我在做的事情:

JSP:

<form:hidden id="passMapData" path="passMapData"/>

控制器:

@RequestMapping(value = "/newPage/testData", method = RequestMethod.POST)
public String newPageTestData(@Valid @ModelAttribute("npf") NewPageForm npf, BindingResult result, Model model) {

}

NewPageForm.java:

public class NewPageForm {
  private Map<String, String> passMapData = null;

  public Map<String, String> getPassMapData() {
    return passMapData;
  }

  public void setPassMapData(Map<String, String> passMapData) {
    this.passMapData = passMapData;
  }
}

问题:

在提交表单时,控制器中的BindingResult显示错误“IllegalStateException:无法将类型[java.lang.String]的值转换为必需的类型[java.util.Map]”

我们不能在表单提交中将Map类型传递给控制器​​吗?

1 个答案:

答案 0 :(得分:4)

<form:hidden id="passMapData" path="passMapData"/>用于传递隐藏的String数据。基本上它是一个隐藏字段,如html中的<input type='hidden'/>

您无法在此处传递HashMap,因此您的 NewPageForm.java 必须是,

public class NewPageForm {
  private String passMapData = null;

  public String getPassMapData() {
    return passMapData;
  }

  public void setPassMapData( String passMapData) {
    this.passMapData = passMapData;
  }
}

注意:如果您需要将HashMap传递给controller,只需将Hashmap设置为request { {1}},

JSP

您可以在request.setAttribute("passMapData",Your HashMap); 中获得相同的Hashmap

controller

希望这有帮助。