2017-01-19 1 views
1

Я пытаюсь создать веб-страницу с использованием шаблона тимелеафа, чтобы представить таблицу заказов с полем, в котором представлен список связанных продуктов с определенным порядком.Как выполнить вложенный цикл Thymeleaf для создания таблицы, содержащей поля из двух классов таблицы JPA

Мой класс контроллера:

@Controller 
public class WebPage { 

@Autowired 
private OrderRepository orderRepository; 
@Autowired 
private ProductRepository productRepository; 

@RequestMapping("/test") 
public String index(Model model) { 
    model.addAttribute("ordertable", orderRepository.findAll()); 
    model.addAttribute("producttable", productRepository.findAll()); 
    return "tablepage"; 
} 

Соответствующая часть thymeleaf шаблона:

<table class="table"> 
<thead> 
      <tr> 
       <th>ID</th> 
       <th>stuff</th> 
       <th>Stuuff</th> 
       <th>stuff</th> 
       <th>products</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr th:each="ordertbl: ${ordertable}"> 
       <td th:text="${ordertbl.stuffId}" /> 
       <td th:text="${ordertbl.stuffname}" /> 
       <td th:text="${ordertbl.stuffname}" /> 
       <td th:text="${ordertbl.stuff}" /> 

       <td><span th:each="producttbl: ${producttable}"> <span 
         th:text="${ordertbl.products}" /> 
       </span></td> 
      </tr> 
     </tbody> 
    </table> 

Что это делает создает таблицу заказов, но в конечном поле, в нем перечислены все продукты, содержащиеся в порядок в несколько раз зависит от количества продуктов в таблице продуктов.

Как это изменить, чтобы в поле порядка перечислялись продукты, принадлежащие каждой строке только один раз. Я знаю, что это скорее всего вложенная ошибка цикла или проблема с моим использованием метода findall(), но я не уверен, как его исправить.

Я предпочел бы использовать таблицу вложенных продуктов, а не извлекать продукты из класса сущности jpa. Спасибо.

+1

Показать, что у вас есть –

+0

. все, что в них, - это геттеры и сеттеры для переменных выше, таких как 'stuffname' и создание списков для другой таблицы. например, в таблице заказов у ​​меня есть: 'private List продукты; \t Публичный список getProducts() { \t \t возвращенные продукты; \t} ' – john

ответ

1

Если вы пытаетесь отобразить products каждого order, то эта линия не так:

<span th:each="producttbl: ${producttable}"> <span th:text="${ordertbl.products}" /> </span> 

Вы итерацию по списку producttable у вас есть в вашей модели, а не текущих ordertblproducts в петле. Он должен быть

<span th:each="producttbl: ${ordertbl.products}"> <span th:text="${producttbl}" /></span> 
Смежные вопросы