更新多个到多个复选框播放框架2

时间:2013-04-08 14:54:31

标签: playframework many-to-many playframework-2.0 playframework-2.1 deadbolt

我在使用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方法时,我收到此错误:

  

InvalidPropertyException :bean类[roles[3]]的属性models.Account无效:非法尝试获取属性roles引发异常;嵌套异常为org.springframework.beans.NullValueInNestedPathException:bean类[roles]的无效属性models.Account:无法实例化属性类型[be.objectify.deadbolt.core.models.Role]以自动增长嵌套属性路径:{{1 }:java.lang.InstantiationException

是否有一些使用复选框和多对多关系更新模型的示例?

非常感谢。 路易斯

1 个答案:

答案 0 :(得分:0)

感谢Alban,我找到了错误。

模型中有属性名称的约定,因此当我将名称从角色更改为 securityRoles 时,它可以正常工作并找到要实例化的正确模型类。

帐户模型:

@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>
}