我的问题类似于JPA坚持多到多
但是,我有两个实体:角色和用户,具有多到多的关系,由rolesusers表表示。在我的应用程序中,我使用JSF2.0,我有一个表单来操作用户数据,还有一个包含所有角色名称的列表和一个selectBooleanCheckbox来查看用户的角色(如果是的话)。此外,它必须能够添加或删除rol (检查或取消检查selectBooleanCheckbox),但当我这样做时,我有两个问题:
1:为了检查这个用户的角色,我在selectBooleanCheckbox的值中使用了以下语法:
<h:column>
<f:facet name="header">
<h:outputText value="ASIGNADO"/>
</f:facet>
<h:panelGroup rendered="#{usuariosController.selected.rolesList.contains(itemRole)}">
<h:selectBooleanCheckbox value="#{true}">
<f:ajax listener="#{rolesView.selectRoleListener(usuariosController.selected, itemRole)}" render="@form" />
</h:selectBooleanCheckbox>
</h:panelGroup>
<h:panelGroup rendered="#{!usuariosController.selected.rolesList.contains(itemRole)}">
<h:selectBooleanCheckbox value="#{false}">
<f:ajax listener="#{rolesView.selectRoleListener(usuariosController.selected, itemRole)}" render="@form" />
</h:selectBooleanCheckbox>
</h:panelGroup>
</h:column>但是,当执行selectRoleListener时,它会抛出一个javax.faces.component.UpdateModelException /users.xhtml @224,102 value="#{true}": Illegal Syntax for Set Operation。
2:如果删除value="#{true}"并将其替换为value="true",则当用户具有列表中指定的角色时,不会选中复选框,但似乎执行了selectRoleListener,但在数据库中看不到更改。
你能帮我处理这个案子吗?希望你能理解我。
谢谢!
发布于 2013-08-29 15:42:09
到目前为止,您似乎忽略了存在于标准JSF组件集中。然后,这种过于复杂和不正确的方法可以简化如下:
<h:selectManyCheckbox value="#{bean.user.roles}">
<f:selectItems value="#{bean.availableRoles}" />
</h:selectManyCheckbox>(为简洁起见省略了转换器/标签/布局等)
其中,#{bean}有一个User user属性,而该属性又具有一个表示所选角色的List<Role> roles属性。然后有一个表示所有可用角色的List<Role> availableRoles属性(如果有必要,它可以保存在不同的应用程序范围内)。
至于你得到的PropertyNotWritableException:这是一个很好的自我解释,这里没有设置者。换句话说,value="#{true}"根本不代表真正的模型属性。您应该引用一个模型属性,该属性具有一个getter和一个setter,如so #{bean.value}。
https://stackoverflow.com/questions/18514837
复制相似问题