【问题标题】:Updating ManyToMany Checkboxes PlayFramework 2更新多对多复选框 Play Framework 2
【发布时间】:2013-04-08 14:54:30
【问题描述】:

我在使用 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 类 [models.Account] 的无效属性 roles[3]:非法尝试获取属性 roles 抛出异常;嵌套异常是org.springframework.beans.NullValueInNestedPathException:bean 类[models.Account] 的无效属性roles:无法将属性类型[be.objectify.deadbolt.core.models.Role] 实例化为自动增长嵌套属性路径:java.lang.InstantiationExceptionbe.objectify.deadbolt.core.models.Role

有没有使用复选框和多对多关系更新模型的示例?

非常感谢。 卢

【问题讨论】:

  • 能给我们POST控制器方法吗?

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


【解决方案1】:

感谢 Alban,我找到了错误。

模型中的属性名称有一个约定,因此当我将名称从 roles 更改为 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>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2022-01-25
    • 2017-04-23
    相关资源
    最近更新 更多