0

如何正确使用 Spring MVC 3.2.3 和 bootstrap selectpicker?

我在 JSP 中创建选择器:

<form:form role="form" id="orgForm" commandName="orgDto" >
...
<form:select id="affOrgId" class="form-control selectpicker" path="affOrgIds" itemValue="id" multiple="true" items="${organizations}" itemLabel="label"/>

并在js中激活它:

$('.selectpicker').selectpicker();

这是控制器类中的表单处理程序方法标头:

  @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public @ResponseBody
OrganizationDto updateOrganization(@PathVariable Long id,@Valid @RequestBody OrganizationDto org) {

我尝试将 selectpicker 选择的值绑定到模型类(OrganizationDto)List<String>List<Integer>模型类(OrganizationDto)中:

private List<String> affOrgIds;

当我在 selectpicker 中选择一些值并提交表单时,我得到一个异常:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
at [Source: org.apache.catalina.connector.CoyoteInputStream@5c82a3e5; line: 1, column: 205] (through reference chain: com.org.OrganizationDto["affOrgIds"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

在 JSON Request Payload 的 chrome 开发者工具中,只有一个值:

    affOrgIds:"48"

(json中还有一些奇怪的字段:_affOrgIds:“1”。那是什么?)

我以这种方式在 JS 中创建这个 json:

var dataObj = $form.serializeJSON();

然后通过$.ajax() 方法创建 PUT 请求。当我调试它affOrgIds:"48"dataObj

那么如何绑定 Spring MVC 和 bootstrap selectpicker 来提交多个选中的值呢?

UPD:我怀疑 serializeJSON() 在这种情况下无法正常工作,我必须以其他方式创建 JSON。

已解决:添加dataObj.affOrgIds = $form.find('#affOrgId').val();

4

1 回答 1

0

$form.serializeJSON() 不适用于 bootstrap-selectpicker。要获取 selectpicker 值,我使用 $form.find('#affOrgId').val();

于 2017-02-13T08:43:02.223 回答