Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 在ui中选择BooleanCheckbox:repeat不调用侦听器_Jsf_Primefaces_Uirepeat_Selectbooleancheckbox - Fatal编程技术网

Jsf 在ui中选择BooleanCheckbox:repeat不调用侦听器

Jsf 在ui中选择BooleanCheckbox:repeat不调用侦听器,jsf,primefaces,uirepeat,selectbooleancheckbox,Jsf,Primefaces,Uirepeat,Selectbooleancheckbox,我试图使用ui:repeat填充selectBooleanCheckbox值,因为这些值是从列表中获取的。复选框值分配得很好,但是当我更改selectBooleanCheckbox值时,不会调用侦听器。我在更改值时也遇到了这个错误 集合操作的语法非法: javax.el.PropertyNotWritableException:集合的语法非法 操作 这是我的密码 <ui:repeat value="#{myBean.myObjects}" var="object">

我试图使用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.isObjectSelectedobject}部分。当我删除该部分时,错误就消失了,监听器被称为fine。但是,如果没有复选框,我将如何获得复选框值呢?即使我直接将值赋值为{true},也不会调用侦听器。我发现了类似的问题,但ajax侦听器没有。

显然,selectBooleanCheckBox必须具有预定义的值,并且不能通过调用方法来填充。通过使用映射并将真值或假值保留在内部来解决此问题

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

在没有ui的情况下尝试:重复?使用与selectBooleanCheckbox不同的组件,如果错误来自{myBean.isObjectSelectedobject},则不调用ajax侦听器是正常的。您的问题与任何标签无关,而是与EL有关。所以把你在谷歌上看到的错误贴出来,然后开始阅读……是的,你也尝试过使用c:foreach。显示了相同的错误。我不确定迭代对象列表的其他方法是否有效。selectBooleanCheckbox的值的可能重复不会从任何变量中获取。在isObjectSelected方法中,我必须检查对象中的某些值,然后返回true或false,但感谢您的发现!您可以使用一个类来装饰您的对象,该类具有一个简单的布尔选择属性以及相应的getter和setter。然后更改ui:repeat value={myBean.myObjectDecorators}var=objectDecorator和p:selectBooleanCheckbox值={objectDecorator.selected}