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

时间:2018-12-06 08:20:51

标签: jsf primefaces uirepeat selectbooleancheckbox

我正在尝试使用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侦听器却没有。

1 个答案:

答案 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>