2016-08-03 1 views
0

У меня есть следующий код тимелеафа. transactionList и AccountList моя модель атрибутыАтрибут настройки в цикле тимелеафа, основанный на втором списке

<tr th:each="transaction : ${transactionList}" th:class="'account_' + ${transaction.accountId}"> 
    <td th:text="${transaction.transactionId}">0</td> 
    <td> 
     <select th:id="'account-' + ${transaction.transactionId}"> 
      <option th:each="account : ${accountList}" 
        th:value="${account.accountId}" 
        th:text="${account.name}" 
        th:selected="${transaction.accountId} == ${account.accountId}"/> 
     </select> 
    </td> 
</tr> 

Моя проблема заключается в настройке имя класса для т.р. тега. Его в настоящее время установлено в

th:class="'account_' + ${transaction.accountId}" 

Но я хотел бы изменить его так, что это строка «account_», а затем индекс AccountList где transaction.accountId == account.accountId.

Так что в основном я хотел бы найти, какой элемент accountList имеет accountId равным transaction.accountId.

Так что я бы как-то должен был перебирать список учетных записей каждый раз перед классом th: в tr.

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

Любые предложения?

ответ

0

я не мог найти гладкий способ сделать это, так что я создал новый атрибут модели, которая отображается accountIds к индексу:

Map<String, Integer> accountIndexMap = new HashMap<>(); 
    IntStream.range(0, accountList.size()) 
      .forEach(i -> accountIndexMap.put(Long.toString(accountList.get(i).getAccountId()), i)); 

model.addAttribute("accountIndexMap", accountIndexMap); 

Тогда в моей странице thymeleaf я изменил й: класс быть:

<tr th:each="transaction : ${transactionList}" th:class="'account_' + ${accountIndexMap.get('__${transaction.accountId}__')}"> 
Смежные вопросы