SpringMVC form: атрибуты items items: что именно он ожидает?
Я все еще новичок в SpringMVC (и jstl, если на то пошло). Я пытаюсь заполнить параметры в списке из списка объектов. Я нашел способ сделать это с помощью c: forEach, но я продолжаю думать, что это должен быть способ сделать форму: метод параметров работает.
Я просматривал, и о ближайшей вещи, которую я могу найти в официальной документации по атрибуту items, здесь → http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.options
Он говорит, что атрибут items для
"Коллекция, Карта или массив объектов, используемых для создания внутренних тегов 'option'
Мое замешательство - это то, что представляет собой коллекция, карта или массив объектов, которые она ищет. В каком формате они должны быть? Он ищет коллекцию или массив типа String? Могу ли я использовать
List<MyObject>
и если да, то что должен был бы MyObject в нем, чтобы это было допустимо (т.е. методы, переменные)?
В настоящее время, когда я пытаюсь использовать MyObject, я получаю исключение, которое говорит -
ConverterNotFoundException: конвертер не найден, способный конвертировать из типа com.example.MyObject для ввода java.lang.String
Нужно ли делать конвертер? Где это будет? Как это будет работать? Я искал это сообщение об ошибке и на самом деле не нашел ничего конкретного, что я пытаюсь сделать... (Большинство из них - результаты о Roo)
класс MyObject выглядит следующим образом:
public class MyObject{
private String company;
private Customer customer;
private Address customerAddress;
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Address getCustomerAddress() {
return customerAddress;
}
public void setCustomerAddress(Address customerAddress) {
this.customerAddress = customerAddress;
}
}
и я пытаюсь использовать его как таковое:
<form:select path="myObjectList">
<form:option value="0"/>
<form:options items="myObjectList" />
</form:select>
Кто-нибудь знает конкретно, что является неправильным в этом методе? Или, следует ли использовать
List<String>
выполнить то, что я делаю?
ИЗМЕНИТЬ здесь трассировка стека → http://pastebin.com/2c5XBCmG
Ответы
Ответ 1
Spring Документация говорит об атрибуте items
тега form:options
:
Атрибут items обычно заполняется коллекцией или массивом объектов предметов. itemValue и itemLabel просто ссылаются на beanсвойства объектов объектов, если они указаны; в противном случае элемент сами объекты будут стягиваться. Кроме того, вы можете указать Карта элементов, и в этом случае ключи карты интерпретируются как опция значения и значения карты соответствуют меткам опций. Если itemValue и/или itemLabel также должны быть указаны, значение элемента свойство будет применено к ключу карты, а свойство метки ярлыка будет примените к значению карты.
В двух словах, если вам нужно использовать список пользовательских Beans как атрибут items, вам также нужно использовать атрибуты itemValue
и itemLabel
. Лично я предпочел бы использовать Maps - LinkedHashMap
экземпляры speciffically - для заполнения моих выбранных тегов, но это вопрос вкуса.
Адаптируя пример из документации Spring, ваш код должен выглядеть следующим образом:
<form:select path="commandAttribute">
<form:option value="-" label="--Please Select"/>
<form:options items="${countryList}" itemValue="company" itemLabel="company"/>
</form:select>
Я использую атрибут company
как itemValue
и itemLabel
, но вы можете выбрать атрибуты, соответствующие вашим требованиям.
Ответ 2
Обычно я делаю это с тегом spring следующим образом:
<springform:select path="myObjectList" id="selected_company">
<springform:option value="0" label="--- Select One ---"></springform:option>
<springform:options items="${myObjectList}" itemValue="company" itemLabel="company"></springform:options>
</springform:select>
не забудьте включить объявление пространства имен:
XMLNS: springform = "http://www.springframework.org/tags/form"