0

Play Framework 2.1.0 でチェックボックスを使用して多対多の関係を更新するのに問題があります。

アカウント モデル:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "account_security_role", joinColumns = { @JoinColumn(name = "account_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "security_role_id", referencedColumnName = "id") })
public List<SecurityRole> roles;

アカウント編集ビューでアカウントの役割を更新したい

アカウント ビューの編集:

@for(role <- SecurityRole.find.all()) {
   <div class="control-group">
      <label class="control-label"> @role.description </label>
      <div class="controls">
         <div class="text-toggle-button">
            <input type="checkbox" name="roles[@role.id].id" value="@role.id" class="toggle"
            @if(loggedAccount.hasHole(role.id)) {
               CHECKED
            } />
         </div>
      </div>
   </div>
}

そのため、Update メソッドを呼び出すと、次のPOSTエラーが発生します。

InvalidPropertyExceptionroles[3] : Bean クラスの無効なプロパティ[ models.Account]: プロパティを不正に取得しようとしたためroles、例外がスローされました。ネストされた例外: Bean クラス [ ] のorg.springframework.beans.NullValueInNestedPathException無効なプロパティ:ネストされたプロパティ パスを自動拡張するためにプロパティ タイプ [ ] をインスタンス化できませんでした: :rolesmodels.Accountbe.objectify.deadbolt.core.models.Rolejava.lang.InstantiationExceptionbe.objectify.deadbolt.core.models.Role

チェックボックスと多対多の関係を使用してモデルを更新する例はありますか?

どうもありがとう。ルー

4

1 に答える 1

0

Alban に感謝します。エラーが見つかりました。

モデルの属性名には規則があるため、名前をロールからセキュリティロールに変更すると、正常に機能し、インスタンス化する正しいモデル クラスが見つかりました。

アカウント モデル:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "account_security_role", joinColumns = { @JoinColumn(name = "account_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "security_role_id", referencedColumnName = "id") })
public List<SecurityRole> securityRoles;

アカウント ビューの編集:

@for(role <- SecurityRole.find.all()) {
   <div class="control-group">
      <label class="control-label"> @role.description </label>
      <div class="controls">
         <div class="text-toggle-button">
            <input type="checkbox" name="securityRoles[@role.id].id" value="@role.id" class="toggle"
            @if(loggedAccount.hasHole(role.id)) {
               CHECKED
            } />
         </div>
      </div>
   </div>
}
于 2013-04-10T16:47:01.473 に答える