我有一个jsp / html表单,用于从用户收集一系列选项。例如,我问“你对这种食物有什么看法?”并且用户可以为每个输入字段添加1个答案(可选择输入无限数量的选项)。 这是html的样子:
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
<li><input type="text" name="choiceList[]" /></li>
...
在我的后端(使用Spring)中,我将choiceList数组分配给String[] choices
java数组。
我的问题是,如果有人在其中一个输入字段(例如:apple,mango,orange“)和另一个输入字段中的”pineapple“中放入逗号分隔列表,则支持的java数组会认为用户输入是4个单独的项目(苹果,芒果,橙,菠萝),因为html表单数组choiceList[]
基本上是逗号分隔列表。
我需要在表单中做什么才能真正告诉用户只填写了2个输入字段?为了更清楚,我希望我的java数组大小为2而不是大小为4。
答案 0 :(得分:1)
您可以使用@InitBinder annotation为字符串数组配置绑定:
@InitBinder("choiceList")
public void fqBinderInit(WebDataBinder b) {
b.registerCustomEditor(String[].class, new StringArrayPropertyEditor("&"));
}
答案 1 :(得分:1)
@Stealth - 因为我的答案有点大,我添加了一个新答案。
如果您在表单中添加了动态输入,那么我可以想到一个解决方案是将完整的输入列表作为json字符串并将请求中的完整json字符串发送到服务器。例如,您可以在自己的约定中拥有输入的名称,因为您当前拥有“choiceList”,您可以将输入作为“choiceList1”,“choiceList2”等,您可以维护现有的计数以及何时创建新的您可以增加计数器并形成新名称的文本。例如,在加载表单时,您有2个字段,然后计数器为2,当使用js创建新字段时,计数器变为3,文本字段名称将为“choiceList3”。现在提交之前,您应该调用一个javascript方法,该方法迭代所有输入字段并将json字符串形成为[{"choiceList1": "apple, mango, orages", "choiceList2": "pear", "choiceList3": "strawberry"}]
。整个字符串可以提交给后端,您可以在后端使用它。
答案 2 :(得分:1)
我基本上有同样的问题,并且问了这个问题:How to prevent parameter binding from interpreting commas in Spring 3.0.5?
accepted answer将允许您阻止Spring解释用户输入中的逗号。
答案 3 :(得分:0)
如果输入类型的名称相同,在您的情况下,它的“choiceList”理想情况下http请求通过以逗号分隔的两个输入附加。理想情况下,您应该有10个不同的文本字段,这些字段具有不同的名称,例如choice1,choice2等,并获取它们输入的任何输入并在后端相应地处理。这是我的想法。