【问题标题】:How to pass a comma separated list in jsp?如何在jsp中传递逗号分隔的列表?
【发布时间】:2012-04-21 22:43:54
【问题描述】:

我有一个 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。

【问题讨论】:

    标签: java jsp spring-mvc


    【解决方案1】:

    前段时间我基本上遇到了同样的问题,所以问了这个问题:How to prevent parameter binding from interpreting commas in Spring 3.0.5?

    accepted answer 将允许您阻止 Spring 解释用户输入中的逗号。

    【讨论】:

    • 谢谢。这就是诀窍。我仍然觉得奇怪的是,看起来很简单的问题需要进行如此多的修改才能使其正常工作。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我也想过这一点,但我的页面最终将允许无限数量的输入字段(使用 js。我也更新了我的问题以反映这一点)。所以这个解决方案将来不会起作用。
      【解决方案4】:

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

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

      【讨论】:

      • 我阅读了 Spring 文档。并在我的表单控制器中编写了这个方法: @InitBinder("choiceNames") public void initBinder(WebDataBinder b) { b.registerCustomEditor(String.class, new StringArrayPropertyEditor("&"));这就是我需要做的吗?我把它放在我的应用程序中,我没有发现任何不同。
      • 为了更清楚一点,如果用户只在一个输入字段中输入“apple, orange, mango”,则不会有“&”发送到后端。
      猜你喜欢
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多