2016-11-07 169 views
1

私は自分のJavaプロジェクトの1つにThymeleafを使用しています。 私が達成しようとしているのは、ドロップダウンから何かを選択し、デフォルト値ではなく「ALL」を選択してから、[POST]ボタンを押して、選択した項目の詳細を取得することです。私はそれを提出した後、ドロップダウンに表示された項目を選択したままにしておきたいと思います。そして今は、デフォルト値に戻ります。指定された以下の属性を選択すると、リストのすべての項目が選択されますが、これはリストの最後の項目を常に表示するため、受け入れられません。リストを取得するThymeleafドロップダウン選択

<div class="controls"> 
    <select class="form-control" name="example" id="example"> 
     <option value="0">ALL</option> 
     <option th:each="user : ${allUsers}" 
       th:value="${user.id}" 
       th:text="${user.name}"> 
     </option> 
    </select> 

私のコントローラ、私はできるだけ単純にそれを保持:

@ModelAttribute("allUsers") 
public List<User> allUsers() { 
    List<User> userList= repo.findAll(); 
    return userList; 
} 

も、私は私の物であることに、注意したいと思います:

<form class="form-search" action="#" 
        th:action="@{/combinedsearch}" 
        th:object="${combinedreport}" method="post"> 

このようなものを使用するアイディアは機能しません。

<select th:field="*{user}">、私のオブジェクトは実際にフィールドとしてユーザーを持っていないためです。

アイデア?助けて?

+0

CombinedReportクラスにユーザーフィールドを追加する際の問題は何ですか複合レポートはエンティティオブジェクトですか? –

+0

私自身の解決策を私自身の問題に投稿しました。これはもはや顕著な問題ではありません。 –

答えて

2

私の問題の解決方法は非常に簡単です。ここに投稿すると、同様の問題に直面した場合でも、いつも自分の答えを参照することができます。

基本的には、combinedReportコントローラにありますが、HTMLフォームの送信後に受信したuser_IDを抽出してから、バックエンドで行う必要があるものを使用してから、そのuser_idを返しますフロントエンドは、単に属性としてモデルに追加します。ユーザーのオブジェクトでmodel.addAttribute("lastselected", userId);

その後、私が作成したカスタム・ロジック・メソッド:

public boolean isSelected(Integer userId){ if (userId != null) { return userId.equals(id); } return false; }

、その後、私は私のthymeleafに私のコードを変更しましたテンプレート:

<select class="form-control" name="example" id="example"> 
    <option value="0">ALL</option> 
    <option th:each="user : ${allUsers}" 
      th:value="${user.id}" 
      th:selected="${user.isSelected(lastselected)}" 
      th:text="${user.name}"> 
    </option> 
</select> 

とbaaaam!それは魅力のように動作します!

+0

バックエンドでエラーをスローする 'th:field'を使用すると、' select'フィールドもあるフォームがあり、thymeleafはname属性を変更します。だから私はあなたの解決策に似た何かを回避策として使いました。そのため、オブジェクト名からthymeleafによって割り当てられたものよりも望ましい 'name'属性を持っていました。 – jacobcs