如何正确使用 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();