MVC Spring - цикл с объединением левых результатов HQL-запроса - PullRequest
1 голос
/ 20 декабря 2011

У меня есть результаты от

Query query = session.createQuery("From Pool as p left join fetch p.poolQuestion as s");

запрос, и я хотел бы отобразить его на JSP.

У меня есть цикл:

<c:forEach items="${pools}" var="pool"> 

        <p>${pool.name}</p>

</c:forEach>

и я хотел бы отобразить результаты из таблицы poolQuestion (которая является таблицей Join). Значение, которое я хочу отобразить, это «answer».

Как я могу это сделать?

    <c:forEach items="${pools}" var="pool"> 
            <p>${pool.answer}</p>
            <p>${pool.name}</p>

    </c:forEach>

Приведенный выше код не работает.

Ошибка:

  org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 21

18:     <c:forEach items="${pools}" var="pool"> 
19:             
20:             <p>${pool.name}</p>
21:             <c:out value="${pool.poolQuestion.answer}"/>
22:             
23:     </c:forEach>
24: 

Модель:

public List<Pool> getAll(){


        Session session = sessionFactory.getCurrentSession();


        Query query = session.createQuery("From Pool as p left join fetch p.poolQuestions as s");


        return query.list();

Контроллер:

List<Pool> pool = poolService.getAll();

        model.addAttribute("pools", pool);

А вид:

<c:forEach items="${pools}" var="pool"> 

            <p>${pool.name}</p>
            <c:out value="${pool.answer}"/>

    </c:forEach>

PS. $ {pool.name} отображается правильно

**

ОК, я понял, мой код должен выглядеть так:

**

<c:forEach items="${pools}" var="pool">

    <c:out value="${pool.name}"/>

    <c:forEach items="${pool.poolQuestions}" var="poolq">

        <c:out value="${poolq.answer}" />

    </c:forEach>



</c:forEach>

Я хочу сделать еще один для каждого ...

Ответы [ 2 ]

0 голосов
/ 29 октября 2015

когда я использовал метод HQL session.createQuery (), мне приходилось извлекать данные в форме индекса, а не путем вызова свойства direclty, например, $ {pool.name}, $ {poolq.answer}

Вместо этого используйте индекс

<c:out value="${pool[0]}"/>

и т. Д.

Любое другое предложение будет оценено.

0 голосов
/ 20 декабря 2011

попытка получить ответ из пула не будет работать, так как свойство ответа находится внутри вопроса.

Ваш код должен быть

${pool.poolQuestion.answer}

И вы должны убедиться, что HTML-код не указан, чтобы убедиться, что ваш HTML действителен и у вас не может быть XSS-атаки. использовать

<c:out value="${pool.poolQuestion.answer}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...