Spring MVC зарегистрировать пользовательский PropertyEditor

Допустим, у нас есть:

Класс автомобиля:

public class Car{
   private String model;
   private String brand;
   private Collection<People> owners;

   //constructor,getters and setters
}

Класс Люди:

public class People{
   private Car car;
   private String name;
   private Gender gender;

   //constructor,getters and setters
}

Класс Пол:

public class Gender{
   private Char gender;

   //constructor,getters and setters
}

Тогда, если я хочу передать владельцев коллекции на мой взгляд:

<body>
        <h1>Car detail: </h1>
        <h2>Owners: </h2>
        <table>
            <form:form modelAttribute="owners" method="post" action="processOwnersSelection.htm">
                <tr>
                    <td>
                        <ul>
                            <form:checkboxes element="li" path="owners" items="${owners}"></form:checkboxes>
                        </ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        <button type="submit">Next</button>
                    </td>
                </tr>
            </form:form>
        </table>               
    </body>

Моим контроллером:

@RequestMapping(value = "/selectOwners")
    protected ModelAndView showOwnersSelection() throws ServiceException{
        return new ModelAndView("car/ownerSelection", "owners", super.getService().getAllOwners());
    }

Заметка. Это будет использоваться для подключения нескольких владельцев (которые существуют в нашей базе данных) к автомобилю.

я получу ошибку:

org.springframework.beans.NotReadablePropertyException: недопустимые "владельцы" свойства класса bean [java.util.HashMap$Values]: свойство "beans" свойства bean недоступно для чтения или имеет недопустимый метод получения: совпадает ли возвращаемый тип получателя с тип параметра установщика?


Насколько я понимаю, Spring преобразует их, используя имплементацию PropertyEditor или Converter?

Поэтому я должен написать один вручную, но тогда как Spring узнает, что я сделал один, который он (или она) должен использовать? И как это должно выглядеть?

2 ответа

Решение

Spring 3 Type Converter SPI заменяет JavaBean PropertyEditors.

<mvc:annotation-driven /> в файле конфигурации будут автоматически установлены конвертеры типов по умолчанию. Мы можем переопределить значения по умолчанию с помощью аннотаций, таких как @DateTimeFormat или @NumberFormat.

Для пользовательских типов полей мы можем придерживаться ниже соглашения по конфигурации:

  1. Определите статический метод valueOf(String) или Constructor(String) для анализа вашего значения из его представления String

  2. Реализуйте toString(), чтобы напечатать ваше значение для отображения

Смотрите эту ссылку для более подробной информации.

Видеть всегда

 <form:form modelAttribute="owners" method="post" 
  action="processOwnersSelection.htm">

modelAttribute должен быть ссылочным именем объекта, в котором хранятся все возможности, входящие в его форму.

и мы можем получить к ним доступ, используя атрибут path тега Spring, например, флажки или что-то еще.

Я предполагаю, что вы используете owners как modelAttribute и который не может быть моделью People класс внутри вашего контроллера.

Я не знаю, как вы определили это в контроллере.

я думаю, что вы должны использовать People Эталонная модель атрибута вместо owners в приведенном ниже коде

 <form:form modelAttribute="owners" method="post" 
      action="processOwnersSelection.htm">

так как path="owners" он пытается найти owners атрибут внутри класса, который вы определили для modelAttribute="owners" внутри контроллера.

пожалуйста, проверьте это правильно.

Другие вопросы по тегам