我有一个标准的多选列表框绑定到对象的List属性。
问题在于,当选择列表框中的单个值,并且该值包含逗号时,当传入数据绑定到list属性时,它将被拆分为两个项目的列表。
例如。如果列表框项是“我包含逗号”,则该属性设置为包含两个元素的列表:“我包含”和“逗号”。
我正在使用Spring 3.0.5和mvc:annotation-driven,所以我得到了FormattingConversionServiceFactoryBean设置的标准转换器;在那里的某个地方,正在调用StringToCollectionConverter。虽然这在其他地方必须有用(在Spring的内部)我不想在这里。
任何人都知道解决这个问题的正确方法吗?这是一个如此明显而简单的问题我不禁想到我在这里遗漏了一些明显的东西;它真的可能是春天的错误/疏忽吗?毫无疑问,会有各种方法来配置转换器或PropertyEditors来解决这个问题,但肯定会有一个优雅且框架友好的答案吗?
表格标签的好评:
<form:select path="someListProperty" multiple="true" items="${possibleValuesForSomeListProperty}" size="5" itemLabel="name" itemValue="name" />
干杯。
答案 0 :(得分:1)
对我来说,显而易见的答案是将列表保留在服务器端,让客户端只选择偏移量,而不是实际值:
<select name="list" >
<option value="0">Foo</option>
<option value="1">Bar</option>
<option value="2">Phleem</option>
</select>
现在在您的控制器中,构造List并激活其索引已被选中的项目。这样您就可以解决问题,并为恶意客户提供更少的操作请求值的机会。