2015-09-16 3 views
2

Я довольно новый весной 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 

Зачем? Что не так? Как я могу это решить?

ответ

4
  • В <form:select> теге вы должны поместить в path имя компонента атрибута будет держать идентификатор выбранного элемента.
  • В <form:options>:
    • items: атрибут боба, содержащий список выбираемых элементов
    • itemLabel: описание будет показано в раздаточной
    • itemValue: поле будет сохранен (обычно ID) в путь к <form:select>

<form:select path="regioni"> 
    <form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" /> 
</form:select> 

Покажет вам Dropbox со всеми описаниями (desReg) регионов, и будет держать в codReg выбранного элемента в атрибуте боба regioni

+0

Я попробовал ваше решение, но теперь я получаю сообщение об ошибке в стеке. Я отредактировал свое оригинальное сообщение, поставив ошибку в конце исходного сообщения –

+1

У вас есть список со всеми регионами, да? как вы будете сохранять выбранную? Как я уже писал в своем вопросе, вы должны добавить атрибут 'regioni' в свой bean-компонент (какой код отсутствует), чтобы сохранить выбранный регион' codReg'. ** Не забудьте сделать 'private regioni' и добавить методы' getter' и 'setter', чтобы весна увидела ваш атрибут –

1

В контроллере, добавьте эту строку кода , Дайте мне знать:

model.addAttribute("regioni",new Twb1012Regione()); 

Если это не помогает, сообщите мне.

 Смежные вопросы

  • Нет связанных вопросов^_^