我正在使用X-editable插件来更新包含多个字段和数据类型的表单。表单的每个元素都有一个name
值,用于映射DTO中的Java属性。当使用Ajax提交表单时,所有值都匹配Java对象的相应字段,除了,对于TAGS数组,理论上应该匹配字符串列表但不知怎的,我得到{{1} }。
堆栈跟踪
NumberFormatException
选择2标记模式
[Request processing failed; nested exception is java.lang.NumberFormatException: For input string: ""] with root cause
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:991)
“tags”属性从数据库加载值。
提交按钮
$('.issue-tags').editable({
pk: 22,
name: 'tags',
placement: 'top',
mode: 'popup',
select2: {
tags: ${tags},
tokenSeparators: [",", " "]
},
ajaxOptions: {
type: 'put'
}
});
Java DTO
$('#btn-submit').click(function() {
$('.editable').editable('submit', {
url: './updateForm.html',
ajaxOptions: {
dataType: 'json'
},
success: function(data, config) {
...
},
error: function(errors) {
...
}
});
});
Spring MVC Controller
public class MyObjectDTO implements Serializable {
private List<String> tags = new ArrayList<String>();
...
}
如果没有tags字段,表单会正确地将数据提交给控制器。
答案 0 :(得分:3)
这些是我使Select2(标记模式)组件与Spring MVC一起使用所做的更改:
选择2标记模式(JavaScript)
$('#issue-tags').editable({
pk: 22,
name: 'tagsMap',
placement: 'top',
mode: 'popup',
emptytext: 'No hay etiquetas definidas',
inputclass: 'input-large',
select2: {
tags: ${allTags},
tokenSeparators: [",", " "],
id: function (item) {
return item.text;
}
},
ajaxOptions: {
type: 'put'
}
});
tagsMap
是我的DTO类的一个对象,它在提交时保存标记:
选择2标记模式(HTML输入)
<a id="issue-tags" href="#" data-type="select2">${tagsByObject}</a>
其中tagsByObject
包含由逗号分隔的标记字符串,由Select2用于显示我的对象的特定标记。
Java DTO
public class MyObjectDTO implements Serializable {
private List<String> tags = new ArrayList<String>();
private Map<String, Object> tagsMap = new HashMap<String, Object>();
...
}
allTags
是 JSON对象,解析为String ,填充Select2组件的下拉菜单,显示我的数据库中持久保存的所有当前标记。
Spring MVC Controller
@RequestMapping(value="/showPage", method = RequestMethod.GET)
public String showPage(Model model, HttpServletRequest request){
...
List<String> myTags = myObjectDTO.getTags();
String tagsByComma = StringUtils.EMPTY;
String allTags = StringUtils.EMPTY;
if(!myTags.isEmpty()){
for(int i = 0; i < myTags.size(); i++){
tagsByComma += myTags.get(i) + ", ";
}
tagsByComma = tagsByComma.substring(0, tagsByComma.length() -2);
}
List<String> dbTags = myService.getTags();
JSONArray array = new JSONArray();
for(String s : dbTags){
JSONObject obj = new JSONObject();
obj.put("id", dbTags.indexOf(s));
obj.put("text", s);
array.put(obj);
}
allTags = array.toString();
model.addAttribute("tagsByObject", tagsByComma);
model.addAttribute("allTags", allTags.length() == 0 ? "[{}]" : allTags);
...
}
提交功能保持不变。