p: диалог не работает должным образом?

У меня есть два p:commandLink:

 <p:commandLink update=":form:livreDetail" oncomplete="PF('livreDialog').show()" title="View Detail">
    <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />
    <f:setPropertyActionListener value="#{livre}" target="#{livreDataGridView.selectedLivre}" />
</p:commandLink>
<p:commandLink update=":form:ajoutPanel" oncomplete="if(#{ empty loginBean.c }){PF('connectDialog').show()}else {PF('ajoutLivrePanier').show()} " title="ajouter au panier">
    <h:outputText styleClass="ui-icon ui-icon-cart" style="margin:0 auto;" />
    <f:setPropertyActionListener value="#{livre}" target="#{livreDataGridView.selectedLivre}" />
</p:commandLink>

Первый p:commandLink one показывает и обновляет содержимое диалогового окна livreDialog p:.

Второй p: commandLink должен показывать connectDialog p: диалог, когда свойство loginBean.c имеет значение null, и ajoutLivrePanier p: диалог, когда это не так.

мой код работает правильно, когда свойство loginBean равно нулю. Но когда это не дает странные результаты:

  1. Когда я нажимаю первый p: commandLink, он показывает только диалоговое окно livreDialog p: без обновления его содержимого. Также отображается сообщение проверки диалогового окна connectDialog p:. это странно!!
  2. Когда я нажимаю второй p: commandLink, появляется только сообщение о подтверждении диалога connectDialog p: тоже странно!!

Вот код дыры:

<p:messages globalOnly="true" autoUpdate="true" showDetail="false"/>
<h:form id="form">
    <p:dataGrid var="livre" value="#{livreListBean.livresList}" columns="3"
                rows="12" paginator="true" id="livres"
                    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                    rowsPerPageTemplate="6,12,16">
        <f:facet name="header">
            Livres
        </f:facet>
        <p:panel header="#{livre.titre}" style="text-align:center">
            <h:panelGrid columns="1" style="width:100%">
                <h:outputText value="#{livre.auteur}" />
                <h:outputText value="#{livre.datePublication}" />
                <p:commandLink update=":form:livreDetail" oncomplete="PF('livreDialog').show()" title="View Detail">
                    <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />
                    <f:setPropertyActionListener value="#{livre}" target="#{livreDataGridView.selectedLivre}" />
                </p:commandLink>
                <p:commandLink update=":form:ajoutPanel" oncomplete="if(#{ empty loginBean.c }){PF('connectDialog').show()}else {PF('ajoutLivrePanier').show()} " title="ajouter au panier">
                    <h:outputText styleClass="ui-icon ui-icon-cart" style="margin:0 auto;" />
                    <f:setPropertyActionListener value="#{livre}" target="#{livreDataGridView.selectedLivre}" />
                </p:commandLink>
            </h:panelGrid>
        </p:panel>
    </p:dataGrid>

    <p:dialog header="Info Livre" widgetVar="livreDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
        <p:outputPanel id="livreDetail" style="text-align:center;">
            <p:panelGrid  columns="2" rendered="#{not empty livreDataGridView.selectedLivre}" columnClasses="label,value">

                <h:outputText value="Titre:" />
                <h:outputText value="#{livreDataGridView.selectedLivre.titre}" />

                <h:outputText value="Auteur" />
                <h:outputText value="#{livreDataGridView.selectedLivre.auteur}" />

                <h:outputText value="Date de publication:" />
                <h:outputText value="#{livreDataGridView.selectedLivre.datePublication}" />

                <h:outputText value="Prix" />
                <h:outputText value="$#{livreDataGridView.selectedLivre.prix}" />
            </p:panelGrid>
        </p:outputPanel>
    </p:dialog>

    <h:panelGroup id="livrePanier">
        <p:dialog header="Se connecter" widgetVar="connectDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="connecterPanel" style="text-align:center;">
                <h:panelGrid  columns="3" >

                    <p:outputLabel for="mail" value="E-mail:" />
                    <p:inputText id="mail" value="#{loginBean.email}" required="true" requiredMessage="Vous devez entrer votre e-mail"/>
                    <p:message for="mail"/>

                    <p:outputLabel for="password" value="Password:" />
                    <p:password id="password" value="#{loginBean.password}" required="true" requiredMessage="Vous devez entrer votre password"/>
                    <p:message for="password"/>
                    <p:commandButton value="Se connecter" action="#{loginBean.LoginProcess()}" process="connecterPanel" update="connecterPanel"/>
                </h:panelGrid>
            </p:outputPanel>
        </p:dialog>
        <p:dialog header="Ajouter au panier" widgetVar="ajoutLivrePanier" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="ajoutPanel" style="text-align:center;" rendered="#{not empty livreDataGridView.selectedLivre}">
                <p:outputLabel value="Voulez vous ajouter ce produit au panier ?"/> 
                <h:panelGrid  columns="2" >
                    <p:outputLabel value="#{livreDataGridView.selectedLivre.titre}" />
                    <p:outputLabel value="#{livreDataGridView.selectedLivre.prix}" />
                    <p:commandButton value="Oui" action="#{livreDataGridView.ajouterLivreAuPanier()}" process="connecterPanel" update="connecterPanel" oncomplete="PF('ajoutLivrePanier').hide()"/>                                   
                    <p:commandButton value="Annuler" onclick="PF('ajoutLivrePanier').hide()"/>
                </h:panelGrid>
            </p:outputPanel>
        </p:dialog>
    </h:panelGroup>
</h:form>

я буду признателен за вашу помощь, чтобы решить проблему

1 ответ

Решение

Тебе нужно process="@this" по вашей команде ссылки. Без этого JSF обрабатывает всю форму, поэтому вы видите те ошибки проверки, которые, в свою очередь, приводят к пропуску фазы Invoke Application.

Смотрите также: Понимание процесса / обновления PrimeFaces и атрибутов JSF f:ajax execute/render.

Другие вопросы по тегам