我在使用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
是否有一些使用复选框和多对多关系更新模型的示例?
非常感谢。 路易斯
答案 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>
}