ui:repeat 中的 selectBooleanCheckBox 不调用侦听器

selectBooleanCheckBox in ui:repeat doesn't call listener

我正在尝试使用 ui:repeat 填充 selectBooleanCheckbox 值,因为这些值取自列表。复选框值分配得很好,但是当我更改 selectBooleanCheckbox 值时不会调用侦听器。更改值

时我也遇到此错误

Illegal Syntax for Set Operation: javax.el.PropertyNotWritableException: Illegal Syntax for Set Operation

这是我的代码

 <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 个听众没有。

显然,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>