Spring MVC 3 - пользовательские метки в <form: select> - PullRequest
5 голосов
/ 23 февраля 2012

Я создаю форму, в которой пользователь сможет выбрать (среди прочих) фабрику продукта.

Каждая фабрика идентифицируется и идентифицируется и имеет конкретный адрес.

Я хочу использовать пользовательскую метку в следующем коде:

<form:select items="${factories}" path="factory" itemValue="id" itemLabel="..."/>

Сначала я попытался использовать функциональность Spring Formatter (интерфейс org.springframework.format.Formatter), но когда я это сделал и когда я удалилАтрибут "itemLabel", чтобы он отображался автоматически через Formatter):

<form:select items="${factories}" path="factory" itemValue="id"/>

Но тогда он не выбирал правильное значение, если оно было установлено (в случае редактирования).

Тогда япопытался:

<form:select path="factory" itemValue="id">
    <c:forEach ...>
         <form:option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"
    </c:foreach>
</form:select>

Но, как и в предыдущем решении, весна не выбирала правильное значение, которое было установлено в модели.

Мой вопрос:

Можно ли отформатироватьтаким образом, эта форма: select работает правильно, когда значение поля select не совпадает с его меткой.

Ответы [ 2 ]

5 голосов
/ 13 ноября 2012

У меня была та же проблема, проблема в форме: значение параметра и метка отображаются непосредственно на свойство, а не имеют гибкости для указания jstl.

Так что вам нужно вручную провернуть HTML, что-тонапример:

<select name="factory">
    <c:forEach var="factory" items="${factories}" >
        <option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"/>
    </c:forEach>
</select>

Spring выберет «путь» на основе атрибута имени (в данном случае «фабрика»), так как он попытается сопоставить объект модели, который вы используете автоматически.

Другой способ - добавить еще одно поле в модель для конкатенации и форматирования метки по вашему желанию.И если это @Entity объект, тогда сделайте поле @Transient.

0 голосов
/ 12 октября 2013

Вы также можете переопределить метод toString () в классе Factory

 @Override
    public String toString() {
        return "desired string"; 
}

Тогда в вашем JSP

<form:select items="${factories}" itemValue="id" path="factory"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...