我遇到的情况是我在JSP中输入了一个用户输入标签的输入元素。例如。 java,foo,bar,anotherTag..etc
<c:url var="saveUrl" value="/create" />
<form:form modelAttribute="myAttribute" method="POST"
action="${saveUrl}">
<form:input path="myTitle" />
<form:textarea path="myPost" />
<form:input type="text" id="tagInput"path="???" />
<input type="submit" value="create" />
</form:form>
现在我的域模型对应于此输入是
private List<Tag> listOfTags
如何将csv绑定到List。如果我在路径中输入listOfTags(由于显而易见的原因这是错误的),我得到错误的绑定异常。 如何将csv转换(或绑定)到List,以便正确提交Spring表单,listOfTags获取在JSP中输入的标记。 实现它的最佳方法是什么?
请帮忙。
答案 0 :(得分:3)
我不确定但试试这个。做一个简单的html输入:
<input type="text" id="tagInput" name="myTags" />
然后在您的控制器中执行以下操作:
@RequestMapping(value="/create", method=RequestMethod.POST)
public void create(..., @ModelAttribute("myAttribute") MyClass myAttribute,
@RequestParam("myTags") String myTags, ...) {
...
myAttribute.setListOfTags(Arrays.asList(myTags.split(",")));
...
}
注意:有关绑定和转换对象的更通用方法,您可能需要查看PropertyEditors和Converters。
答案 1 :(得分:2)
我建议尝试将其直接绑定到listOfTags
属性。为了使其工作,只需向String
类添加一个valueOf(String)
类型的参数(或定义静态方法Tag
)的构造函数。
答案 2 :(得分:1)
很确定你可以这样做:
<c:forEach var="i" begin="1" end="10">
<form:input type="text" path="listOfTags" />
</c:forEach>
让用户将每个标记输入单独的文本输入。这是因为当Spring进行绑定时,Spring会以相同的形式name
自动将多个输入绑定到List。
您可以使用一些jQuery糖仅显示一个或两个,然后提供一个小部件来显示更多标记输入。或者甚至编写一些很酷的JS来填充来自单个文本输入的输入,就像StackOverflow在添加标签时那样。