простые лица, пытающиеся добавить ap: message для ошибок проверки и p: growl для сообщений об успехе - PullRequest
2 голосов
/ 28 марта 2012

У меня есть страница с диалоговым окном, где пользователь может добавить проект. Я хочу, чтобы сообщения об ошибках проверки на стороне сервера отображались в теге p: message, но если проверка прошла успешно, я хочу, чтобы сообщение об успехе отображалось в теге p: growl и закрывалось диалоговое окно.

Как мне этого добиться? В настоящее время я могу заставить все сообщения (ошибки или успеха) появляться либо во всех p: growl, во всех p: сообщениях, либо во всех обоих.

<p:growl id="growl" showDetail="true" life="3000" autoUpdate="false" />

<p:dialog id="projectsDialog" header="Add Project" widgetVar="projectsDialog"  modal="true">

  <p:messages id="messages" autoUpdate="false" showDetail="true" />

    <h:form>

      <h:outputLabel for="investigator" value="Investigator" />
      <p:selectOneMenu value="#{ppBacker.investigatorKey}" id="investigator" size="1" styleClass="listBoxMedium" >
      <f:selectItems value="#{ppBacker.investigators}" />
      </p:selectOneMenu>            

      <h:outputLabel for="startDate" value="Start Date" />
      <p:calendar value="#{ppBacker.startDate}" id="startDate" mode="popup" navigator="true" required="true" requiredMessage="Start Date is required" />                    

      <h:outputLabel for="endDate" value="End Date" />
      <p:calendar value="#{ppBacker.endDate}" id="endDate" mode="popup" navigator="true" required="true" requiredMessage="End Date is required" />

      <p:commandButton value="Add Project" id="s1Btn" type="submit" oncomplete="handleLoginRequest(xhr, status, args)" actionListener="#{ppBacker.addProject}" update=":growl">
      <f:setPropertyActionListener target="#{ppBacker.grantKey}" value="#{ppBacker.grantKey}" />
      </p:commandButton>           

      <!-- this jquery closes the add project dialog if the server side validation is successful -->
      <script type="text/javascript">  
        function handleLoginRequest(xhr, status, args) {  
            console.log('args.success = '+args.success);
            console.log('args.validationFaile = '+args.validationFailed);
                if(args.validationFailed || !args.success) {  
                  jQuery('#projectsDialog').effect("shake", { times:1 }, 100);  
            } else {  
              projectsDialog.hide();  

            }  
        }  
    </script>  

    </h:form>

Мой метод ppBacker.addProject

public void addProject(){

    RequestContext context = RequestContext.getCurrentInstance();  
        FacesMessage msg = null;  
        boolean success = false;  

        // validate the investigator, start date, and end date are set
        if(!getProject().getInvestigatorKey().equals("0") && getProject().getStartDate() != null && getProject().getStartDate() != null) {  
            success = true;
        msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Project Added Successfully", ""); 

        } else {  
            success = false;    
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Failed", "Investigator, Start Date, and End Date are required");  

        }  

        System.out.println("success = "+success);
        // I'M GUESSING THAT I CAN SOMEHOW USE THE FIRST PARAMETER OF THIS TO ATTACH MY MESSAGE, BUT I'M NOT SURE
        FacesContext.getCurrentInstance().addMessage(null, msg);
        context.addCallbackParam("success", success);  

}

1 Ответ

1 голос
/ 08 января 2013

Используйте функцию globalOnly. При вызове FacesContext#addMessage() присвойте всем сообщениям об ошибках не null идентификатор клиента (например, компонент ввода, компонент кнопки или даже компонент формы) и присвойте всем сообщениям об успехе идентификатор клиента null.

Таким образом, вы можете уйти с:

<p:messages ... globalOnly="false" />
<p:growl ... globalOnly="true" />

Альтернативой является использование #{facesContext.validationFailed} в атрибуте rendered. При добавлении сообщения об ошибке вручную звоните FacesContext#validationFailed().

if (error) {
    context.addMessage(null, errorMessage);
    context.validationFailed();
} else {
    context.addMessage(null, successMessage);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...