2016-09-04 1 views
0

У меня есть сложный компонент, содержащий поле Set. Я получаю доступ к этому элементу со страницы jsp. Мой «Сито» объект боб это:Как получить набор <Object> из bean-компонента с JSTL

public class Sito { 
    @Id 
    @Column(name="idSITO") 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int idSito; 
    private String nome; 

    @ManyToMany(targetEntity = Bene.class, cascade = { CascadeType.ALL }) 
    @JoinTable(name = "installazione", 
      joinColumns = { @JoinColumn(name = "idSito") }, 
      inverseJoinColumns = { @JoinColumn(name = "idBene") }) 
    private Set<Bene> beni; 

    public Set<Bene> getBeni() { 
     return beni; 
    } 
    public void setBeni(Set<Bene> beni) { 
     this.beni = beni; 

    } 

    public String getListBeniString(){ 
     String listBeniString=""; 
     for(Bene b:beni){ 
      listBeniString += b.toString(); 
     } 
     return listBeniString; 
    } 

    @Override 
    public String toString() { 
     System.err.println("idSito " + getIdSito()+" "+getListBeniString()); 
     return "Sito [idSito=" + idSito + ", nome=" + nome + ", fi=" + fi + ", lambda=" + lambda + ", h=" + h + ", ente=" + ente + "]"; 
    } 
     /* Other get and set... */ 
} 

«Bene» боб это:

@Entity 
@Table(name="bene") 
public class Bene { 
    @Id 
    @Column(name="idBENE") 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int idBene; 

    private String tipo; 
    private String nome; 
    //get and set 
} 

на моей странице Jsp контроллер передать мне список < Сито> и я не буду итерировать на поле «бени». Мой код jsp таков:

<c:forEach items="${listSiti}" var="sito"> 
    <c:forEach items="${sito.beni}" var="bene"> 
     <label>${bene.idBene}</label> 
    </c:forEach> 
</c:forEach> 

Страница не отображается и пуста. Что не так?

+0

Вы не можете перебирать на «Бени» поле, потому что он не инициализирован. –

+0

Я не вижу ничего плохого в коде JSP, который вы опубликовали. Может быть, listSiti пуст. Может быть, у всех сити есть антеп-набор бени. Возможно, на сервере появилось исключение. Возможно, вы забыли объявить JSTL lib в JSP. Добавьте код отладки, посмотрите на свою консоль в журналах. Используйте свой отладчик. –

+0

Поле «beni» инициализируется Hibernate. я опустил аннотацию, и теперь я добавил ее. Если я распечатаю содержимое «beni» с помощью вспомогательной функции, выход будет правильным. «listSiti» не пуст, а «beni» правильно загружен Hibernate. JSTL lib объявлен в моем jsp. Я решил очистить кэш и перезапустить сервер. благодаря – MaNuNiNjA

ответ

0

EDIT: Я заметил очень странное поведение. Я отлаживал «toString()» и «getListBeniString()» для отладки, и я заметил, что если я прокомментирую строку кода «System.err.println (« idSito »+ getIdSito() +» «+ getListBeniString()), ;» в Sito Bean страница пуста, если я ее поддерживаю, результат страницы верен.

С линией коды протоколируемого сервера заключается в следующем:

Hibernate: select sito0_.idSITO as idSITO1_3_, sito0_.ente as ente2_3_, sito0_.fi as fi3_3_, sito0_.h as h4_3_, sito0_.lambda as lambda5_3_, sito0_.nome as nome6_3_ from sito sito0_ 
    idSito 2 Bene [idBene=4, tipo=Bananone, nome=lksdbsdfb]Bene [idBene=2, tipo=Radio multicanale, nome=jjjjj123]Bene [idBene=3, tipo=Transmitter, nome=9ui234] 
    Hibernate: select beni0_.idSito as idSito1_3_0_, beni0_.idBene as idBene2_2_0_, bene1_.idBENE as idBENE1_0_1_, bene1_.nome as nome2_0_1_, bene1_.tipo as tipo3_0_1_ from installazione beni0_ inner join bene bene1_ on beni0_.idBene=bene1_.idBENE where beni0_.idSito=? 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=2, nome=Scoglio Eugenio, fi=50.0, lambda=20.0, h=541, ente=CP - Roma] 
    Hibernate: select beni0_.idSito as idSito1_3_0_, beni0_.idBene as idBene2_2_0_, bene1_.idBENE as idBENE1_0_1_, bene1_.nome as nome2_0_1_, bene1_.tipo as tipo3_0_1_ from installazione beni0_ inner join bene bene1_ on beni0_.idBene=bene1_.idBENE where beni0_.idSito=? 
    idSito 3 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=3, nome=Punta Gabbiano, fi=20.0, lambda=0.1, h=84, ente=CP - Cagliari] 
    Hibernate: select beni0_.idSito as idSito1_3_0_, beni0_.idBene as idBene2_2_0_, bene1_.idBENE as idBENE1_0_1_, bene1_.nome as nome2_0_1_, bene1_.tipo as tipo3_0_1_ from installazione beni0_ inner join bene bene1_ on beni0_.idBene=bene1_.idBENE where beni0_.idSito=? 
    idSito 5 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=5, nome=Punta Gabbiano, fi=20.23, lambda=0.1, h=83, ente=CP - Cagliari] 
    Hibernate: select beni0_.idSito as idSito1_3_0_, beni0_.idBene as idBene2_2_0_, bene1_.idBENE as idBENE1_0_1_, bene1_.nome as nome2_0_1_, bene1_.tipo as tipo3_0_1_ from installazione beni0_ inner join bene bene1_ on beni0_.idBene=bene1_.idBENE where beni0_.idSito=? 
    idSito 6 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=6, nome=Punta Gabbiano, fi=20.23, lambda=10.0, h=84, ente=CP - Cagliari] 
    idSito 2 Bene [idBene=4, tipo=Bananone, nome=lksd<bsdfb]Bene [idBene=2, tipo=Radio multicanale, nome=jjjjj123]Bene [idBene=3, tipo=Transmitter, nome=9ui234] 
    idSito 3 
    idSito 5 
    idSito 6 

и нет ошибок в браузере.

Если я прокомментирую строку «System.err.println (« idSito »+ getIdSito() +" "+ getListBeniString());" то журнал сервера таков:

Hibernate: select sito0_.idSITO as idSITO1_3_, sito0_.ente as ente2_3_, sito0_.fi as fi3_3_, sito0_.h as h4_3_, sito0_.lambda as lambda5_3_, sito0_.nome as nome6_3_ from sito sito0_ 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=2, nome=Scoglio Eugenio, fi=50.0, lambda=20.0, h=541, ente=CP - Roma] 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=3, nome=Punta Gabbiano, fi=20.0, lambda=0.1, h=84, ente=CP - Cagliari] 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=5, nome=Punta Gabbiano, fi=20.23, lambda=0.1, h=83, ente=CP - Cagliari] 
    INFO : com.spring.dao.SitoDAOImpl - Sito List::Sito [idSito=6, nome=Punta Gabbiano, fi=20.23, lambda=10.0, h=84, ente=CP - Cagliari] 

и никаких ошибок в браузере, но страница пуста.

Кусок моего контроллера заключается в следующем:

@Controller 
    public class ReamController { 
    private static final Logger logger = LoggerFactory.getLogger(ReamController.class); 

    /*-----------------------SERVICE---------------------------*/ 
    private SitoService sitoService; 
    @Autowired(required=true) 
    @Qualifier(value="sitoService") 
    public void setSitoService(SitoService ss){ 
    this.sitoService=ss; 
    } 

    ... 
    ... 

    /*----------------------Installazioni-----------------------------*/ 
    @RequestMapping(value = "/ricercaInstallazione", method = RequestMethod.GET) 
    public String getRicercaInstallazione(Model model) { 
     model.addAttribute("listSiti", this.sitoService.listSiti()); 
     return "ricercaInstallazione"; 
     } 
    } 

это очень странно ....

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