1

Play で Web アプリケーションを作成しています! 1.2.5. 属性の 1 つが列挙型の Set コレクションであるモデル クラスがあります。

@Entity
@Table(name="AppUser")
public class User extends Model {

    ...

    @Column(name = "industry_id")
    @ElementCollection(targetClass = Industry.class)
    @CollectionTable(name = "Industry", joinColumns = @JoinColumn(name = "AppUser_id"))
    public Set<Industry> industries = new HashSet<Industry>();

}

列挙型は次のとおりです。

public enum Industry {
    Industry1,
    Industry2
}

フィールドがチェックボックスのリストとして表されるindustries編集テンプレートにコレクションをバインドするにはどうすればよいですか?チェックボックスをオンまたはオフにすると、オブジェクトコレクションに追加または削除されますか?industries

ありがとう

4

2 に答える 2

1

このようにチェックボックスをバインドできます

#{form @save()}
<input type="checkbox" value="Industry1" name="user.industries">Industry number 1
<input type="checkbox" value="Industry2" name="user.industries">Industry number 2
<input type="checkbox" value="Industry3" name="user.industries">Industry number 3
<input type="submit" value="Submit">
#{/form}

私の場合、JPAアノテーションのないモデルで機能しますが、あなたの場合でも機能すると思います

于 2012-07-16T07:19:38.953 に答える
1

最近それを行ったので、次の解決策を提供します。

コントローラーでは、Enum を としてIteratorビューに渡します。

Iterator<Attribute> industries = EnumSet.allOf(Industry.class).iterator();
render(industries);

フォーム ビューで、リストを繰り返し処理し、何が選択されているかを確認します。

#{list items: industries, as: 'industry' }
<label>
     <input type="checkbox" name="industries" value="${industry.name()}"
        #{if user?.industries?.contains(industry)} checked #{/if}
     />
     &{'industry'}
</label>
#{/list}    

フィールドが選択されていない場合を処理するには、次のものが必要です (何も選択されていない場合、値は送信されず、既存の選択が維持されるためです。

<input type="hidden" name="industries" value="" />

Set<Industry> industries最後に、フォーム入力を受け取るコントローラ メソッドでは、 Play が選択された値をロードするパラメータがあれば十分です。

于 2012-07-17T06:31:25.020 に答える