<f:setPropertyActionListener 它不适用于 Dialog

<f:setPropertyActionListener it does not work with Dialog

单击编辑按钮时,所选项目未显示在对话框中

en el apartado del dialog tengo el rendered, que se supone realiza la llamada al controllador

这是我的Carrucel.Xhtml

           <p:commandButton update="tab:formIndex:myform:editarSlider"  oncomplete="PF('popupEditSlider').show()" icon="ui-icon-pencil" title="Editar">
             <f:setPropertyActionListener value="#{car}" target="#{carrucelController.selectCarrucel}" />
           </p:commandButton>                            


<p:dialog id="dialog" header="Editar Slider" widgetVar="popupEditSlider" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
                <p:outputPanel id="editarSlider" style="text-align:center;">
                    <p:panelGrid  columns="2" rendered="#{not empty carrucelController.selectCarrucel}" columnClasses="label,value">                            
                        <f:facet name="header">
                            <img src="#{arrucelController.selectCarrucel.imagen}" style="height: 80px;"/>
                        </f:facet>

                        <h:outputText value="Titulo" />
                        <p:inputText value="#{arrucelController.selectCarrucel.nombre}" />

                        <h:outputText value="Texto:" />
                        <p:inputText value="#{arrucelController.selectCarrucel.textoImagen}" />
                    </p:panelGrid>
                    <br></br>
                    <p:commandButton id="btnGuardar" styleClass="clsButton" value="Guardar" actionListener="#{carrucelController.editSlider}"
                    oncomplete="PF('popupEditSlider').hide()" update="@form"/>
                </p:outputPanel>
            </p:dialog> 

我的控制器

这里我定义了版本的方法

public void editSlider() {
    log.info("[-- Editar Slider:  " + selectCarrucel.getNombre() + " --]");

    for(int i=0; i<lstCarrucel.size(); i++) {
        log.info("[-- " + selectCarrucel.getNombre() + " - " + 
        selectCarrucel.getLink() + " - " + selectCarrucel.getTextoImagen() +  " --]");
        if(lstCarrucel.get(i).getNombre() == selectCarrucel.getNombre()){
            lstCarrucel.get(i).setNombre(selectCarrucel.getNombre());
            lstCarrucel.get(i).setTextoImagen(selectCarrucel.getTextoImagen());
            lstCarrucel.get(i).setLink(selectCarrucel.getLink());

        }
    }

 }
}

这是编辑我的项目的方法

您正在重新生成整个页面时生成对话框的内容。因此,当对话内容准备好时,#{carrucelController.selectCarrucel} 就是 null

您的按钮现在在支持 bean 中设置 属性 - 并且仅显示在 属性 为空时呈现的对话框。

在对话框中使用 dynamic=true 应该可以解决您的问题。这将在显示对话框时呈现对话框的内容(即一旦 setPropertyActionListener 通过 onComplete 调用 show()),而不是在 dom 中生成对话框时在第一页加载期间。

供参考:https://www.primefaces.org/showcase/ui/overlay/dialog/dynamic.xhtml