2017-08-07 4 views
0

私はSpring BootアプリケーションでThymeleafテンプレートを作成しています。コントローラでデータが正しく取得されていますが、テンプレートでどのように処理するかわかりません。私は、ユーザーに関連しているサマリーテーブルを持って、ユーザーは多くのサマリーを持つことができます。各サマリーアイテムはメモを持つことができます。また、要約ごとに多くの注釈があります。Springブートアプリケーション - 現在のオブジェクトに基づいてコントローラからThymeleafへのデータ(リストのリスト)をどのように渡すことができますか?

サマリーテーブルにメモIDを含めること(一部のサマリーアイテムにメモが含まれない場合があります)、またはコントローラでデータを正しく取得しているので、テンプレートのロジックがオフになっていますか?

これは私が私のコントローラ内のデータを取得しています方法です:

 modelAtt.addObject("sumList", summaryService.getList(currentUser)); 

     List<Notes> note = notService.getList(summary.getId()); 
     modelAtt.addObject("noteList", note); 

これは私が(代わりに要約あたりのノートを表示するので、私は現在のノートを示すが、下にいます、私のテンプレート内をループしようとしています方法ですすべての要約項目は、ユーザーが代わりの概要の下にノートが)に属しています

<div th:if="${not #lists.isEmpty(sumList)}"> 
<div th:each="sum : ${sumList}"> 
    <tr> 
     <th>Summary</th> 
    </tr> 
    <td th:text="${sum.description}"></td> 
    <div th:if="${not #lists.isEmpty(noteList)}"> 
      <tr> 
      <th>Description</th> 
      </tr> 
     <tr th:each="note : ${noteList}"> 
      <td th:text="${note.description}"></td> 
     </tr> 
    </div> 
</div> 
</div> 

すべてのヘルプや提案をいただければ幸いです、ありがとう!

編集: `

//Service class 
    public List<Summary> getList(User user) { 
     return summaryRepository.summaryByUser(user); 
    } 


    public List<Note> getList(int id) { 
     Summary summary = summaryService.findOne(caseId); 
     return noteRepository.noteBySum(summary); 
    } 

    //Repo Class 
    @Query("select a from summary a where a.user = ?1") 
    List<Summary> summaryByUser(User user); 

    @Query("select a from note a where a.summary = ?1") 
    List<Note> noteBySum(Summary summary); 

`

+0

である可能性があります。データ構造に関する詳細を追加する –

+0

@ HithamS.AlQadheebは混乱のためにお詫び申し上げます。私はコントローラ内のデータを正しく取得していますが、テンプレート内のデータを表すのに問題があります。 SummaryテーブルにはユーザIDがあり、NotesテーブルにはサマリーIDがあります。そこで、現在のサマリーIDに基づいて一覧を取得することを除いて、現在のユーザーに関連するすべてのサマリーアイテムを取得して、サマリーの一覧を作成しました。それは理にかなっていますか? – BluLotus

+0

JPAを使用している場合は、要約を取得してフェッチタイプを選択するだけです。これは自動的にすべてをもたらすでしょう。 http://www.baeldung.com/hibernate-lazy-eager-loadingをチェックしてください。また、オブジェクトとそのリンク方法を表示してください。より良いORMとデータ構造のためにJPAを休止状態で使用することをお勧めします。 –

答えて

0

編集:私はあなたの編集を確認した後、初めての質問間違っだと思います。だから、あなたはすべての要約のためのメモのリストを持っていますか? Thymeleafテンプレートにデータを渡すときは、各要約をNotesのリストに関連付ける必要があります。 JPAアソシエーション(@OneToMany)を使用するか、以下のようにコントローラーコードを変更してリストの代わりにマップを返すことができます。

List<Summary> summaryList = summaryService.getList(currentUser)); 
Map<Integer,List<Note>> noteListMap = new HashMap<>(); 
for (Summary summary : summaryList) { 
    noteListMap.put(summary.getId(),noteService.getList(summary.getId())) 
} 
modelAtt.addObject("sumList", summaryList); 
modelAtt.addObject("noteListMap", noteListMap); 

次に、あなたのテンプレートには、それはまだ混乱して

<div th:if="${not #lists.isEmpty(sumList)}"> 
<div th:each="sum : ${sumList}"> 
    <tr> 
     <th>Summary</th> 
    </tr> 
    <td th:text="${sum.description}"></td> 
    <div th:if="${not #lists.isEmpty(noteListMap[__${sum.id}__])}"> 
      <tr> 
      <th>Description</th> 
      </tr> 
     <tr th:each="note : ${noteListMap[__${sum.id}__])}"> 
      <td th:text="${note.description}"></td> 
     </tr> 
    </div> 
</div> 
</div> 
+0

これは私が達成しようとしていたものです。ありがとうございました! – BluLotus

関連する問題