0

我有一个带有 jsf2 和 primefaces 的表单,其中包含一个管理两件事的提交按钮:首先:使用更新属性进行表单验证,其次在验证成功时启动一个确认对话框,所有这些都由以下人员管理:

update="myfieldset display"

所以我的问题是,当我单击按钮验证时:如果验证不成功:验证消息显示在表单中:好的,但如果验证成功,我必须再次单击以显示对话框

有谁知道如何解决这个问题?

<!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" />  

我必须单击两次(我认为一次用于验证,一次用于显示对话框)才能显示对话框

也在官方文档中:他们将此对话框与 onclick 属性一起使用

你有什么别的想法吗

4

0 回答 0