2017-09-14 7 views
0

私はthymeleafを学びたい小さなプロジェクトに取り組んでいます。 私は3つのテーブルを持っています。id、外部キーなどの割り当てID、外部キーとしてのIDとプロジェクトID、およびIDとプロジェクト名を含むプロジェクトが含まれています。Thymeleaf別のテーブルの値に基づいてあるテーブルの列を表示するにはどうすればいいですか

タイムテーブルをhtmlで表示する必要がありますが、割り当てID列の代わりにプロジェクト名を表示する必要があります。

私はすでに必要な列を呼び出す私のサービスクラスでselectを持っていますが、どのようにtimetablesでそれを探すのではなく、その列を読むようにthymeleafに伝えることができます。ここで

は私のコード

htmlです

  <table class="table table-bordered"> 
       <thead> 
        <tr> 
        <th>id</th> 
        <th>assignment</th> 
        <th>date</th> 
        <th>number of hours</th> 
       </tr> 
       </thead> 
       <tbody> 
       <tr th:each = "timetable: ${timetables}"> 
        <td th:text="${timetable.timetableId}">45</td> 
        <td th:text="${timetable.assignmentId}">vasi</td> 
        <td th:text="${timetable.date}">1 ian</td> 
        <td th:text="${timetable.hoursWorked}">3000</td> 
       </tr> 
       </tbody> 
      </table> 

Serviceクラス

@Autowired 
JdbcTemplate template; 

public List<Timetable> findAll(String loginname) { 
    String sql = " SELECT timetables.timetableId, timetables.assignmentId, timetables.date, timetables.hoursWorked, users.username, projects.projectName FROM timetables INNER join assignments on assignments.assignmentId = timetables.assignmentId INNER JOIN users on users.userId = assignments.userId " + 
      "INNER JOIN projects on assignments.projectId = projects.projectId where username= ?"; 

    RowMapper<Timetable> rm = new RowMapper<Timetable>() { 
     @Override 
     public Timetable mapRow(ResultSet resultSet, int i) throws SQLException { 
      Timetable timetable = new Timetable(resultSet.getInt("timetableId"), 
        resultSet.getInt("assignmentId"), 
        resultSet.getDate("date"), 
        resultSet.getInt("hoursWorked")); 

      return timetable; 
     } 
    }; 

    return template.query(sql, rm, loginname); 
} 

コントローラ

@Autowired 
TimetableService service; 

@Autowired 
AssignmentsService serv; 

@RequestMapping(value = {"/Timetable"}, method = RequestMethod.GET) 
public String index(Model md){ 
    org.springframework.security.core.Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    String loginname = auth.getName(); 
    md.addAttribute("timetables", service.findAll(loginname)); 
    return "Timetable"; 
} 

答えて

1

私はJdbcTemplateに慣れていないですが、私はあなたがする必要があるwhink th電子だけでなく

<tbody> 
    <tr th:each = "timetable: ${timetables}"> 
     <td th:text="${timetable.timetableId}">45</td> 
     <td th:text="${timetable.projectName}">vasi</td> 
     <td th:text="${timetable.date}">1 ian</td> 
     <td th:text="${timetable.hoursWorked}">3000</td> 
    </tr> 
</tbody> 
+0

作品完璧にプロジェクト名を追加するには

RowMapper<Timetable> rm = new RowMapper<Timetable>() { @Override public Timetable mapRow(ResultSet resultSet, int i) throws SQLException { Timetable timetable = new Timetable(resultSet.getInt("timetableId"), resultSet.getInt("assignmentId"), resultSet.getDate("date"), resultSet.getString("projectName"), resultSet.getInt("hoursWorked")); return timetable; } }; 

そして、すでにとmapRowでそれを持っていない場合はHTMLページで、タイムテーブルクラスでPROJECTNAMEを追加

を次。どうもありがとうございました。 上記の他にも、私のモデルクラスにはprojectsという名前のフィールド、getterとsetter、そしてassignmentIdの代わりにstringプロジェクトを使用するコンストラクタが必要でした。 – Adi

+0

@Adi Gladそれはうまくいきました! –

関連する問題