Я довольно новый весной MVC, и у меня есть некоторые трудности, чтобы понять, как именно работает тег .Как правильно использовать тег Spring MVC <form:select>, чтобы показать значение определенного поля объекта в коллекции?
Итак, у меня есть следующая ситуация.
В контроллере у меня есть этот метод:
@RequestMapping(value = "/consultazioneMinisteriale", method = RequestMethod.GET)
public String consultazione(Locale locale, Model model) {
List<Twb1012Regione> listaRegioni = geograficaService.getListaRegioni();
System.out.println("Numero regioni: " + listaRegioni.size());
model.addAttribute("listaRegioni", listaRegioni);
return "utenteMinisteriale/consultazione";
}
Как вы можете видеть, этот метод получения списка Twb1012Regione объекта и поместить его в объект модели, так он будет доступен в consultazione. jsp страница.
Так Twb1012Regione класса является модель объекта, как это:
@Entity
@Table(name="anagrafiche.TWB1012_REGIONE")
@NamedQuery(name="Twb1012Regione.findAll", query="SELECT t FROM Twb1012Regione t")
public class Twb1012Regione implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="COD_REG")
private String codReg;
@Column(name="DES_REG")
private String desReg;
.....................................
.....................................
OTHER FIELDS
.....................................
.....................................
}
Где поле codReg однозначном идентифицировать объект и desReg содержит значение, которое я хочу показать, как значение в тег.
Finnaly это код моего consultazione.jsp зрения:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page session="false"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body class="azure">
<h1>Hello World</h1>
<!-- <div> ${listaRegioni} </div> -->
<div>
<label>Regioni:</label>
<form:select path="listaRegioni" items="${listaRegioni}"/>
</div>
</body>
</html>
Проблема заключается в том, что делать в этом случае я получить выбери выпадающий список, но он показывает ссылки на все объекты моего Twb1012Regione а не название поля desReg.
Это HTML оказал выход:
<select>
<option value="[email protected]">[email protected]</option>
<option value="[email protected]">[email protected]</option>
<option value="[email protected]">[email protected]</option>
.................................................
.................................................
.................................................
</select>
Почему? Что мне не хватает? Как я могу обучить значение поля desReg каждого Twb1012Regione вместо ссылки объектов?
EDIT-1:
Я tryied изменить в:
<form:select path="regioni">
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
Но теперь, когда страница отображается я получаю сообщение об ошибке в мой StackTrace:
12:44:52,112 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/WIFIPNSD].[jsp]] (http-localhost/127.0.0.1:8080-4) JBWEB000236: Servlet.service() for servlet jsp threw exception: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'regioni' available as request attribute
Зачем? Что не так? Как я могу это решить?
Я попробовал ваше решение, но теперь я получаю сообщение об ошибке в стеке. Я отредактировал свое оригинальное сообщение, поставив ошибку в конце исходного сообщения –
У вас есть список со всеми регионами, да? как вы будете сохранять выбранную? Как я уже писал в своем вопросе, вы должны добавить атрибут 'regioni' в свой bean-компонент (какой код отсутствует), чтобы сохранить выбранный регион' codReg'. ** Не забудьте сделать 'private regioni' и добавить методы' getter' и 'setter', чтобы весна увидела ваш атрибут –