我正在尝试使用ui:repeat填充selectBooleanCheckbox值,因为这些值是从列表中获取的。复选框值分配良好,但是当我更改selectBooleanCheckbox值时不会调用侦听器。更改值
时也出现此错误设置操作的非法语法: javax.el.PropertyNotWritableException:Set的语法非法 操作
这是我的代码
<ui:repeat value="#{myBean.myObjects}" var="object">
<p:selectBooleanCheckbox
value="#{myBean.isObjectSelected(object)}">
<p:ajax update="growl"
listener="#{myBean.doSomethingtoObject(object)}" />
</p:selectBooleanCheckbox>
<h:outputText value="#{object.name}" />
</ui:repeat>
问题来自value="#{myBean.isObjectSelected(object)}"
部分。当我删除该部分时,错误消失了,侦听器被称为正常。但是如果没有它,我还能如何获得复选框值?即使我立即将值分配为#{true}
,也不会调用该侦听器。我发现了类似的问题,但ajax侦听器却没有。
答案 0 :(得分:1)
显然,selectBooleanCheckBox必须具有预定义的值,并且不能通过调用方法来填充。通过使用Map并在其中保留TRUE或FALSE值来解决此问题。
<ui:repeat value="#{myBean.myObjects}" var="object">
<p:selectBooleanCheckbox
value="#{myBean.objectMap[object]}">
<p:ajax update="growl"
listener="#{myBean.doSomethingtoObject(object)}" />
</p:selectBooleanCheckbox>
<h:outputText value="#{object.name}" />
</ui:repeat>