0

我正在尝试使用 ui:repeat 填充 selectBooleanCheckbox 值,因为这些值是从列表中获取的。复选框值分配得很好,但是当我更改 selectBooleanCheckbox 值时不会调用侦听器。更改值时我也收到此错误

集合操作的非法语法:javax.el.PropertyNotWritableException:集合操作的非法语法

这是我的代码

 <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 侦听器。

4

1 回答 1

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>
于 2019-06-13T02:17:34.790 回答