Подтвердить что ты не робот

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

4b9b3361

Ответ 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"