如何在百里香中处理多个选择的列表?

时间:2014-10-04 07:06:29

标签: java spring spring-mvc thymeleaf

我有一个多选这样的东西..

<select multiple="multiple" th:field="*{names}">
 <option value="abc">abc</option>
 <option value="def">def</option>
 <option value="ghi">ghi</option>
 <option value="jkl">jkl</option>
</select>

其中names是列表的名称,如下所示..

List<String> names=new ArrayList<>();

现在,我希望用户选择多个名称,然后输入names列表。 考虑一下我选择了

  1. ABC

  2. DEF

  3. GHI

  4. 当我提交表单时,我发现数据是这样发送的。

    names=abc&names=def&names=ghi
    

    但是,我希望它像names[0]=abc&names[1]=def&names[2]=ghi

    P.S。我不想使用Ajax表单发送。

1 个答案:

答案 0 :(得分:0)

为什么提交表单的查询字符串看起来很重要?是因为您使用Spring MVC以外的其他框架处理此表单吗?

根据spring-mvc的标签,Spring需要names=abc&names=def&names=ghi。这是names <select>表单字段的数据,该字段是具有多个值的单个表单字段。在内部,Spring会正确地将它映射到表单支持bean的names属性。

要获得names[0]=abc&names[1]=def&names[2]=ghi,您需要在HTML中使用3个<select>元素来表示每个唯一字段名称(即names[0]names[1]等),这是我怀疑你想要。

据我所知,这是HTML的行为,无法改变。

我也进行了快速搜索,并提醒PHP,要求多选字段的名称以[]结尾,以便将其解析为数组。但这只是一个PHP的怪癖。这是我能够根据您的原始要求考虑的最接近的原因。但是,这需要这样的事情:names[]=abc&names[]=def&names[]=ghi。我怀疑你可以模仿Spring / Thymeleaf,因为那些不是有效的属性名称字符。有关详细信息,请参阅此处:https://stackoverflow.com/a/11616681/1034436(注释评论)