#spring #spring-mvc
#spring #spring-mvc
Вопрос:
У меня есть стандартное окно списка с несколькими вариантами выбора, привязанное к свойству List объекта.
Проблема в том, что когда выбрано единственное значение в списке, и это значение содержит запятую, оно разбивается на список из двух элементов, когда входящие данные привязаны к свойству list.
например. если элемент списка «Я содержу, запятая», свойство устанавливается на список, содержащий два элемента: «Я содержу» и «запятая».
Я использую Spring 3.0.5 и mvc: аннотации, управляемые, поэтому я получаю стандартные преобразователи, настроенные с помощью FormattingConversionServiceFactoryBean; где-то там вызывается StringToCollectionConverter. Хотя это должно быть полезно в другом месте (во внутренних компонентах Spring) Я не хочу этого здесь.
Кто-нибудь знает правильный способ обойти это? Это такая очевидная и простая проблема, что я не могу не думать, что здесь я упускаю что-то очевидное; действительно ли это ошибка / недосмотр в Spring? Без сомнения, будут различные способы настройки конвертеров или редакторов свойств для решения этой проблемы, но должен быть элегантный и понятный для фреймворка ответ, не так ли?
Сформируйте тег для хорошей оценки:
<form:select path="someListProperty" multiple="true" items="${possibleValuesForSomeListProperty}" size="5" itemLabel="name" itemValue="name" />
Приветствия.
Ответ №1:
Мне кажется очевидным ответом сохранить список на стороне сервера и позволить стороне клиента выбирать только смещения, а не фактические значения:
<select name="list" >
<option value="0">Foo</option>
<option value="1">Bar</option>
<option value="2">Phleem</option>
</select>
Теперь в вашем контроллере создайте список и активируйте элементы, индекс которых выбран. Таким образом вы решаете свою проблему, а также предоставляете вредоносным клиентам меньше возможностей для манипулирования значениями запроса.
Комментарии:
1. Да, действительно, и тот факт, что значения чаще будут публиковаться в виде индексов / идентификаторов / кодов, объясняет тот факт, что больше людей не сталкивались с этой проблемой, и, возможно, почему она осталась незамеченной. Я воспользуюсь подобным подходом, если до этого дойдет, но я надеялся, что может быть какая-то простая конфигурация, которую я мог бы использовать. (Упомянутый вами пункт безопасности не является проблемой в данном контексте, но я принимаю вашу точку зрения.)