2

我有一个 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[] choicesjava 数组。

我的问题是,如果有人在其中一个输入字段(例如:apple、mango、orange")和“pineapple”中放置一个逗号分隔的列表在另一个输入字段中,则支持的 java 数组认为用户输入是 4 个独立的项目(苹果、芒果、橙子、菠萝),因为 html 表单数组choiceList[]基本上是一个逗号分隔的列表。

我需要在表单中做什么才能真正告诉用户只填写了 2 个输入字段?为了更清楚,我希望我的 java 数组的大小为 2 而不是 4。

4

4 回答 4

2

您可以使用@InitBinder 注释来配置字符串数组的绑定:

@InitBinder("choiceList")
public void fqBinderInit(WebDataBinder b) {
  b.registerCustomEditor(String[].class, new StringArrayPropertyEditor("&"));
}  
于 2012-04-09T15:14:15.233 回答
1

@Stealth - 因为我的答案有点大,所以我添加了一个新答案。如果您在表单中添加了动态输入,那么我可以想到一种解决方案是将完整的输入列表作为 json 字符串并将请求中的完整 json 字符串发送到服务器。例如,您可以在自己的约定中使用输入的名称,因为您当前有“choiceList”,您可以将输入设置为“choiceList1”、“choiceList2”等,您可以维护现有计数以及在创建新计数时文本,您可以增加计数器并形成新名称。例如,在加载表单时,您有 2 个字段,则计数器为 2,使用 js 创建新字段时,计数器变为 3,文本字段名称将为“choiceList3”。[{"choiceList1": "apple, mango, orages", "choiceList2": "pear", "choiceList3": "strawberry"}]. 整个字符串可以提交到后端,您可以在后端使用它来处理它。

于 2012-04-10T02:54:06.223 回答
1

不久前我基本上遇到了同样的问题并问了这个问题:如何防止参数绑定在 Spring 3.0.5 中解释逗号

接受的答案将允许您防止 Spring 解释用户输入中的逗号。

于 2012-04-10T10:41:41.240 回答
0

如果输入类型的名称相同,则在您的情况下,它的“choiceList”理想地是http请求通过附加两个输入以逗号分隔来实现。理想情况下,您应该有 10 个不同名称的不同文本字段,例如choice1、choice2 等,并获取他们输入的任何输入并在后端进行相应处理。这是我的想法。

于 2012-04-09T16:23:32.610 回答