我有一个多选这样的东西..
<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
列表。
考虑一下我选择了
ABC
DEF
GHI
当我提交表单时,我发现数据是这样发送的。
names=abc&names=def&names=ghi
但是,我希望它像names[0]=abc&names[1]=def&names[2]=ghi
。
P.S。我不想使用Ajax表单发送。
答案 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(注释评论)