2012-04-09 30 views
2

我有一个jsp/html表单,它从用户收集一系列选择。例如,我问:“你喜欢这种食物什么?”并且用户可以为每个输入字段添加1个答案(可以选择不限数量的选项)。 下面是HTML看起来像什么:如何在jsp中传递逗号分隔列表?

<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),我给你的选择列表排列到String[] choices Java数组。

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

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

回答

1

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

@InitBinder("choiceList") 
public void fqBinderInit(WebDataBinder b) { 
    b.registerCustomEditor(String[].class, new StringArrayPropertyEditor("&")); 
} 
+0

我读了Spring文档。在我的表单控制器写了这个方法: @InitBinder( “choiceNames”) \t公共无效initBinder(WebDataBinder B){ \t \t b.registerCustomEditor(String.class,新StringArrayPropertyEditor(” &")); \t} 是所有我需要这样做吗?我把它放在我的应用程序中,我没有注意到任何不同。 – Stealth 2012-04-09 15:28:54

+0

为了更清楚,如果用户只在一个输入字段中输入“apple,orange,mango”,没有“&”发送到后端 – Stealth 2012-04-09 15:44:13

0

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

+0

我也想过,但我的页面最终会允许无限数量的输入字段(使用js。我也更新了我的问题以反映这一点)。所以这个解决方案将来不会起作用。 – Stealth 2012-04-09 16:29:08

1

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

相关问题