質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

686閲覧

SpringBoot、Thymeleafで検索をしたい

mirunee

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/12/22 09:51

前提

SpringBoot Thymeleaf Java oracleを用いて簡単なWebアプリを作成しております。

実現したいこと

・プルダウンで部署を選択した際にヒットした人をページに一覧表示させる
こちら何かお気づきのことがある方、よろしくお願いいたします。

発生している問題・エラーメッセージ

・部署選択すると画面遷移はするが、絶対に0件の表示が出てしまう。

該当のソースコード

Java

1@Controller 2public class ListController { 3 4@Autowired 5EmployeeRepository employeeRepository; 6 7@Autowired 8DepartmentRepository departmentRepository; 9 10@RequestMapping("/list/deptId") 11 public String searchDeptId(Integer deptId, Model model) { 12 Department dept = new Department(); 13 dept.setDeptId(deptId); 14 List<Employee> department = employeeRepository.findByDepartment(dept); 15 model.addAttribute("deptId", department); 16 return "list/list"; 17 } 18}

HTML

1 <div class="title">部署名検索</div> 2 <div class="form"> 3 <form th:action="@{/list/deptId}" method="get"> 4 5 <span th:if="${selectedDeptId == null}"> 6 <select name="deptId"> 7 <option value="1"selected>営業部</option> 8 <option value="2">経理部</option> 9 <option value="3">総務部</option> 10 </select> 11 </span> 12 13 <span th:unless="${selectedDeptId == null}"> 14 <select name="deptId"> 15 <option value="1" th:selected="${selectedDeptId}== '1'">営業部</option> 16 <option value="2" th:selected="${selectedDeptId}== '2'">経理部</option> 17 <option value="3" th:selected="${selectedDeptId}== '3'">総務部</option> 18 </select> 19 </span> 20 21 <input type="submit" value="検索" /> 22 </form> 23 24<body class="admin user_list"> 25<h3>社員一覧画面</h3> 26 27 <th:block th:if="${#lists.isEmpty(employee)}"> 28<div class="message"> 29<p class="back_to_top_message">該当する社員は存在しません。</p> 30<p class="back_to_top_link"><a th:href = @{redirect:/list} >戻る</a></p> 31</div> 32 </th:block> 33<table class="list_table" th:if="${!#lists.isEmpty(employee)}"> 34<tr> 35<th class="empId">社員ID</th> 36<th class="empName">社員名</th> 37<th:block th:if="true"> 38 <th class="gender">性別</th> 39 <th class="address">住所</th> 40 <th class="birthday">生年月日</th> 41 <th class="authority">権限</th> 42 </th:block> 43 <th class="deptName">部署名</th> 44 <th class="button" colspan="2">操作</th> 45 </th:block> 46</tr> 47 48<tr th:each="emp:${employee}"> 49<td th:text="${emp.empId}"></td> 50<td th:text="${emp.empName}"></td> 51<td th:if="${emp.gender == 1}" th:text = "男性"></td> 52<td th:if="${emp.gender == 2}" th:text = "女性"></td> 53<td th:text="${emp.address}"></td> 54<td th:text="${#dates.format(emp.birthday,'yyyy/MM/dd')}"></td> 55<td th:if="${emp.authority == 1}" th:text= "一般"></td> 56<td th:if="${emp.authority == 2}" th:text= "管理者"></td> 57<td th:text= "${emp.department.deptName}"></td> 58 59<td><form method="post" action="" style="display:inline;"> 60<input type = "hidden" name="empId" th:value="${emp.empId}" /> 61<input type="submit" value = "変更" /> 62</form> 63<form method="post" action="delete_check" style="display:inline;"> 64<input type = "hidden" name="empId" th:value="${emp.empId}" /> 65<input type="submit" value="削除" /> 66</td> 67</tr> 68 69</table> 70 71</body> 72
@Repository public interface EmployeeRepository extends JpaRepository<Employee, Integer> { List<Employee> findByDepartment(Department dept); }
@Entity @Table(name = "employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_emp_gen") @SequenceGenerator(name = "seq_emp_gen", sequenceName = "seq_emp", allocationSize = 1) private Integer empId; @Column private String empPass; @Column private String empName; @Column private Integer gender; @Column private String address; @Column private Date birthday; @Column private Integer authority; @ManyToOne @JoinColumn(name = "dept_id", referencedColumnName="deptId") private Department department; //getter setter省略 DepartmentエンティティにはdeptIdとdeptNameが存在

補足情報(FW/ツールのバージョンなど)

SpringBoot2.5.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KT001

2022/12/22 11:19

動作確認はしていないのですが、以下が気になりました。 ■ListController.javaの部分を、以下のように修正 employeeRepository.findByDepartmentId(deptId) ■EmployeeRepository.java側を、以下のように修正 List<Employee> findByDepartmentId(Integer id);
KT001

2022/12/22 11:31 編集

SQLが正しく生成されているかを確認する場合は、以下も追加ください。 ■application.propertiesに、以下を追加 spring.jpa.show-sql=true 追記:m.ts10806さんが書いてくださってますが、いくつか蛇足的な書き方をしている点があるので、その辺りも見直した方がよろしいかもしれません。
guest

回答1

0

デバッグモードで変数確認されると分かると思いますが、

public String searchDeptId(Integer deptId, Model model) {

これだけでは「選択したdeptId」は入ってきません。
リクエストパラメータを受け取るアノテーションが必要です。
@RequestParam

蛇足ですが、Thymeleaf上で条件式に&&なども利用できるので、
今回のように同じセレクトボックスを大きな条件で2つ書く必要はないと思います。
「初期値が営業部で一度フォーム送信したら選択値」ですよね。

動作確認まではしてないですが例えば

HTML

1 <select name="deptId"> 2 <option value="1" th:selected="${selectedDeptId eq null or selectedDeptId eq '1'">営業部</option> 3

投稿2022/12/22 11:21

m.ts10806

総合スコア80852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問