2

我陷入了一种情况,即我在用户输入标签的 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 绑定到列表。如果我在路径中输入 listOfTags (由于显而易见的原因这是错误的),我会得到不正确的绑定异常。如何将 csv 转换(或绑定)到 List 以便正确提交 Spring 表单并且 listOfTags 获取在 JSP 中输入的标签。实现它的最佳方法是什么?

请帮忙。

4

3 回答 3

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(",")));
    ...
}

注意:有关绑定和转换对象的更通用方法,您可能需要查看PropertyEditorsConverters

于 2012-09-09T16:30:59.103 回答
2

我建议尝试将其直接绑定到listOfTags属性。为了使其工作,只需将具有一个String类型参数(或定义静态方法valueOf(String))的构造函数添加到Tag类中。

于 2012-09-20T07:41:48.593 回答
1

很确定你可以做这样的事情:

<c:forEach var="i" begin="1" end="10">
    <form:input type="text" path="listOfTags" />
</c:forEach>

您让用户将每个标签输入到单独的文本输入中。这是因为 Spring 在绑定时会自动将具有相同表单name的多个输入绑定到 List。

您可以使用一些 jQuery 糖只显示一两个,然后提供一个小部件来显示更多标签输入。或者甚至编写一些很酷的 JS 来填充单个文本输入的输入,就像 StackOverflow 在添加标签时所做的那样。

于 2012-09-10T01:15:45.393 回答