0

私は2つのことを管理する送信ボタンを含むjsf2とprimefacesを含むフォームを持っています.1つ目:更新属性を使用したフォーム検証と、2つ目は検証が成功したときに確認ダイアログボックスを起動することであり、これらすべては次によって管理されます:

update="myfieldset display"

だから私の問題は、ボタンの検証をクリックすると、検証が成功しなかった場合:検証メッセージが次の形式で表示されることです:OKですが、検証が成功した場合は、もう一度クリックしてダイアログボックスを表示する必要があります

誰もがこの問題を解決する方法を知っていますか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">



    <script type="text/javascript">
        <!--
        function effacer(formulaire){
            for (var i=0; i<formulaire.length; i++){
                if (formulaire.elements[i].type=="input" || formulaire.elements[i].type=="textarea" ) {formulaire.elements[i].value="";}
            }
            document.getElementById('contenu_input').value="";
        }
        //-->
    </script>

    <body>

        <ui:composition template="./template_utilisateur.xhtml">

            <ui:define name="content">
                <h:form id="form" prependId="false" >  
                    <p:fieldset  id="myfieldset" legend="Nouveau message">

                        <p:messages id="msgs"/>

                        <h:panelGrid columns="3" style="margin-bottom:10px">
                            <h:outputLabel for="title" value="Titre : *"/> 
                            <p:inputText id="title" style="width:340px;" value="#{messageController.titre}" required="true" requiredMessage="veuillez saisir un titre" label="Titre">  
                                <f:validateLength minimum="10" />  
                            </p:inputText>  
                            <p:message for="title" display="icon"/>
                            <h:outputLabel for="city" value="Destinataire : *" /> 
                            <p:selectOneMenu id="city" value="#{messageController.destinataire}" label="Destinataire" required="true" requiredMessage="veuillez choisir au moins un destinataire" >  
                                <f:selectItem itemLabel="Séléctionner déstinataire" itemValue="" />  
                                <f:selectItems value="#{messageController.users}" />    
                            </p:selectOneMenu>  
                            <p:message for="city" id="msgSurname3" display="icon"/>

                            <h:outputLabel for="comm" value="Lié a La commande N° : " /> 
                            <p:selectOneMenu id="comm" label="Commande"  value="#{messageController.idComm}"  >  
                                <f:selectItem itemLabel="Aucune commande" itemValue="" />  
                                <f:selectItems value="#{messageController.id_c}" />    
                            </p:selectOneMenu>  
                            <p:message for="comm" id="msgSurnamse3" display="icon"/>

                        </h:panelGrid>
                        <h:outputLabel for="contenu" value="Contenu : *" /> 
                        <h:panelGrid columns="2">
                            <p:editor id="contenu" widgetVar="editer" value="#{messageController.message}" width="600" required="true" requiredMessage="Veuillez saisir le contenu du message" >
                                <f:validateLength minimum="10" /> 
                            </p:editor>  
                            <p:message for="contenu" id="editorm" display="icon"/>
                        </h:panelGrid>

                        <h:panelGrid columns="3">  
                            <p:commandButton id="submitButton" value="envoyer" update="myfieldset display"  onclick="#{messageController.retournerDialog()}" icon="ui-icon-disk" />  
                            <p:commandButton id="clearButton" type="reset" value="initialiser" onclick="editer.clear()"  
                                             icon="ui-icon-close" /> 
                        </h:panelGrid>  

                    </p:fieldset>  

                    <p:dialog header="Confirmation" widgetVar="dlg" showEffect="fade" hideEffect="fade" modal="true">  
                        <h:panelGrid id="display" columns="1" cellpadding="4">
                            <h:outputText value="Titre : " />  
                            <h:outputText value="#{messageController.titre}" id="model"/>  

                            <h:outputText value="Déstinataire :" />  
                            <h:outputText value="#{messageController.destinataire}" id="year"/>  

                            <h:outputText value="Lié à la commande N° : " />  
                            <h:outputText value="#{messageController.idComm}" id="manufacturer"/>  

                            <h:outputText value="Contenu :" />  
                            <h:outputText id="displxcay" value="#{messageController.message}" escape="false" />
                        </h:panelGrid>

                    </p:dialog>  

                </h:form>  

            </ui:define>

        </ui:composition>

    </body>
</html>

そしてここでダイアログを起動するメソッド

public String retournerDialog(){
    String retour = "";
    if( getDestinataire() != "" && getMessage()!= "" && getTitre()!="" && getMessage().length()>9 && getTitre().length()>9){
        retour="dlg.show()";
    }
    return retour;
    }

前もって感謝します


更新:詳細な回答をありがとうBalusC、私はあなたの両方の回答をテストしましたが、ここでは機能しませんボタンのコードです:

<p:commandButton id="submitButton" value="envoyer" update="myfieldset, display" action="#{messageController.showDialog}"  icon="ui-icon-disk" />  

および managedBean :

 private boolean showDialog;

public void showDialog() {
    showDialog = true;
}

public boolean isShowDialog() {
    return showDialog;
}

上記のコードでは、検証が成功してもダイアログは表示されません。アクションはブール値ではなく結果文字列を返す必要があるためだと思います。

<p:commandButton id="submitButton" value="envoyer" update="myfieldset, display" onclick="dlg.show();"  icon="ui-icon-disk" />  

検証が失敗した場合でも表示されます

そして、私がこのようにメソッドを上に置いたときにあなたに思い出させるために:

<p:commandButton id="submitButton" value="envoyer" update="myfieldset, display" onclick="#{messageController.retournerDialog()}"  icon="ui-icon-disk" />  

ダイアログが表示されるために、2回クリックする必要があります(1つは検証用、もう1つはダイアログを表示するためだと思います)。

公式ドキュメントにもあります:彼らはこのダイアログを onclick 属性で使用します

他に何か考えはありますか

4

0 に答える 0