<f:setpropertyactionlistener it =“”does =“”not =“”work =“”with =“”dialog =“”

时间:2017-10-18 21:43:46

标签: java primefaces jsf-2

=“”

单击编辑按钮

时,对话框中不会显示所选项目

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());

        }
    }

 }
}

这是编辑我的项目的方法

1 个答案:

答案 0 :(得分:0)

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

您的按钮现在在辅助bean中设置属性 - 只显示属性为null时呈现的对话框。

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

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