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

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

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

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

Thymeleaf

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

Q&A

解決済

2回答

4158閲覧

Java Thymeleaf 検索機能 検索結果が0の場合の処理をしたい

pokerStars

総合スコア67

Java

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

Thymeleaf

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

0グッド

0クリップ

投稿2019/09/04 02:13

編集2019/09/04 02:48

Todoリストで検索機能を作っているのですが、タイトルにもある通り検索結果が0の場合の処理をしたいのですがうまくいきません。

java

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 7 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 8 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> 9 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> 10 11</head> 12<body> 13<div th:replace="/common.html::header"></div> 14<hr/> 15</br> 16</br> 17</br> 18 19 20<div class="container"> 21<form method="POST" th:action="@{/search}" > 22 23 24 <input class="form-control" type="text" name="title" required/> 25 </br> 26 27 <div class="text-center"> 28 <input class="btn btn-outline-secondary" type="submit" value="検索" /> 29 </div> 30 31 32</form> 33 34 <table class="table table-bordered">  35 <tbody> 36 <tr th:each="todo, list :${todos}" th:object="${todo}"> 37 38 <p th:text="'Todoが' + ${list.count} + '件見つかりました'"></p> 39 40 <!--- 41 <div th:if="#lists.size(todos)"> 42 <P>対象のToDoは見つかりません</P> 43 </div> 44 45 <div th:if="${list.count == 0}"> 46 <P>対象のToDoは見つかりません</P> 47 </div> 48 49 ---> 50 51 52 <div th:if="${todo.done == false}"> 53 <td th:text="*{title}"></td> 54 <td th:text="*{day}"></td> 55 <td th:text="${#dates.format(todo.createDay, '(yyyy-MM-dd )')}">(1970-01-01 )</td> 56 </div> 57 58 <td><a class="btn btn-outline-dark" th:href="@{/{id}/edit(id=*{id})}">編集</a></td> 59 60 61 <td> 62 <form th:unless="${todo.done}" method="post" th:action="@{/done}" th:object="${todo}"> 63 <input type="hidden" name="id" th:value="*{id}" /> 64 <input class="btn btn-outline-danger" type="submit" value="未完了" /> 65 </form> 66 </td> 67 </tr> 68 </tbody> 69 </table> 70 71</div> 72</body> 73</html>

java

1@RequestMapping(value ="/search", method = RequestMethod.POST) 2 public String search(@RequestParam("title") String title, Model model) { 3 List<Todo> todos = service.searchTodo(title); 4 model.addAttribute("todos", todos); 5 return "search"; 6 }

java

1@Repository 2public interface TodoRepository extends JpaRepository<Todo, Long> { 3 List<Todo> findByTitleContainingOrderByIdAsc(String title); 4}

java

1@Service 2@Transactional 3public class TodoService { 4 5 @Autowired 6 private TodoRepository repository; 7 8 public List<Todo> findAll() { 9 return repository.findAll(new Sort(Sort.Direction.DESC, "id")); 10 } 11 12 public Todo getOne(Long id) { 13 return repository.getOne(id); 14 } 15 16 public Todo save(Todo todo) { 17 return repository.save(todo); 18 } 19 20 public List<Todo> searchTodo(String title){ 21 return repository.findByTitleContainingOrderByIdAsc(title); 22 } 23 24} 25

java

1@Entity 2@Table(name = "todoitems") 3public class Todo { 4 @Id 5 @GeneratedValue(strategy = GenerationType.IDENTITY) 6 7 private long id; 8 9 @NotNull 10 @Size(min = 1, max = 30) 11 private String title; 12 13 @NotNull 14 @Size(min = 1, max = 30) 15 private String day; 16 17 18 private Boolean done ; 19 20 @Temporal(TemporalType.DATE) 21 @Column(updatable = false) 22 private Date createDay; 23 24 @PrePersist 25 public void prePersist() { 26 this.createDay = new Date(); 27 } 28 29 public Date getCreateDay() { 30 return createDay; 31 } 32 33 34 public Long getId() { 35 return id; 36 } 37 38 public void setId(Long id) { 39 this.id = id; 40 } 41 42 public String getTitle() { 43 return title; 44 } 45 46 public void setTitle(String title) { 47 this.title = title; 48 } 49 50 public String getDay() { 51 return day; 52 } 53 54 public void setDay(String day) { 55 this.day = day; 56 } 57 58 59 public Boolean getDone() { 60 return done; 61 } 62 63 public void setDone(Boolean done) { 64 this.done = done; 65 } 66 67 68 69 70 71} 72 73

検索結果が0の場合の処理をするにはどのような書き方をするべきなのでしょうか?
何卒よろしくお願いします!

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

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

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

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

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

m.ts10806

2019/09/04 02:21

そもそもlist というかtodosの定義が分からない事には何とも言えません。 コードはなるべく全てご提示ください。 通常は見つからないのならlistよりもtodos自体が0件なのではないでしょうか。 作り次第なので、やはり全て提示してもらう必要があります。
pokerStars

2019/09/04 02:37

上記に全て提示しました!
m.ts10806

2019/09/04 02:43 編集

「言語名」なのでできればServiceとかEntityとかではなく「Java」でお願いします。
guest

回答2

0

ベストアンサー

質問文に記載の下記のコードですが、#listsユーティリティオブジェクトの使い方に間違いがあるようです。

<div th:if="#lists.size(todos)"> <P>対象のToDoは見つかりません</P> </div>

正しくは下記のように${ }で囲いsizeの結果を判定する必要があります。

<div th:if="${#lists.size(todos) == 0}"> <P>対象のToDoは見つかりません</P> </div>

もう少し簡潔に記述するならisEmptyを使うこともできます。

<div th:if="${#lists.isEmpty(todos)}"> <P>対象のToDoは見つかりません</P> </div>

ユーティリティオブジェクトの使い方は下記ページを参照してください。
Appendix B: Expression Utility Objects

投稿2019/09/04 05:03

rubytomato

総合スコア1752

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

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

pokerStars

2019/09/04 05:17

ご返信ありがとうございます。 修正したところうまく動かすことができました!! ただ、検索ボタンを押す前から<P>対象のToDoは見つかりません</P>が出力されてしまうのですが、検索ボタンを押してからnullかどうかを判別させることはできるのでしょうか?
rubytomato

2019/09/04 05:36

検索処理のコード全体が記載されていないので答えられませんが、nullの判定は <div th:if="${todos == null}"> および <div th:if="${todos != null}">で出来ると思います。 または <div th:if="${todos != null && #lists.isEmpty(todos)}"> のように組み合わせて判定させることも出来ます。
pokerStars

2019/09/04 06:11

ご教授していただいたやり方で、思いどうりに動かすことができました! 誠にありがとうございます!!!
guest

0

<tr>の中に置けるのは<th><td>なのでHTML的に文法違反です。 どこかに表示されるとしても、思ったところには出ないでしょう。

また、listにあてられているのはステータス変数(ドキュメント)というものです。

countということは1から連番が出るだけですね。
大抵は表の列番号を表示する際に用いられます。

${todos}自体の長さ(length)で良いのではないでしょうか。

html

1<p th:if="${todos.length == 0}" th:text="対象のToDoは見つかりません"></p> 2 3<table class="table table-bordered" th:if="${todos.length > 0}">  4 5 6中略 7</table> 8

投稿2019/09/04 02:52

編集2019/09/04 02:59
m.ts10806

総合スコア80850

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

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

pokerStars

2019/09/04 03:06

Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "todos.length == 0" (template: "search" - line 34, col 8) Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "todos.length == 0" (template: "search" - line 34, col 8) Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'length' cannot be found on null 書いてみたのですがこのようなエラーになってしまいます
m.ts10806

2019/09/04 03:08

0件の時にnullが返ってきてるならlength使えませんね。 nullかどうかで判断するか、空配列を返すようにJava側を調整してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問