2012-10-29 7 views
5

i ein Formular mit Eingängen Validierung haben wie folgt:Warnung Facesmessage (n) haben die Warteschlange gestellt worden, aber möglicherweise nicht angezeigt wurden

<h:form id="insurance-form" rendered = "#{(param['insSaved']=='editable')}"> 
    <div id="insurance-info"> 
     <ul id="form-labels" style="text-align:left;"> 
      <li>Insurance Company&nbsp;</li> 
      <li>Policy Number&nbsp;</li> 
      <li>Coverage Amount&nbsp;</li> 
      <li>Agent's Phone Number&nbsp;</li> 
      <li>Agent's Email&nbsp;</li> 
     </ul> 

     <ul> 
      <li> 
       <h:inputText value="#{residenceBeans.insuranceCompany}" id="insurance-company" required="true" requiredMessage="company is required"/> 
       <h:message for="insurance-company" styleClass="validation-error-msg insuarnce-validation"/> 
      </li> 

      <li> 
       <h:inputText value="#{residenceBeans.policyNumber}" id="insurance-policy" required="true" requiredMessage="number is required"/> 
       <h:message for="insurance-policy" styleClass="validation-error-msg insuarnce-validation"/> 
      </li> 

      <li> 
       <h:inputText value="#{residenceBeans.coverageAmount}" id="insurance-amount" required="true" requiredMessage="coverage amount is required"/> 
       <h:message for="insurance-amount" styleClass="validation-error-msg insuarnce-validation"/> 
      </li> 

      <li> 
       <h:inputText value="#{residenceBeans.agentPhone}" id="insurance-phone" required="true" requiredMessage="phone is required"/> 
       <h:message for="insurance-phone" styleClass="validation-error-msg insuarnce-validation"/> 
      </li> 

      <li> 
       <h:inputText value="#{residenceBeans.agentMail}" id="insurance-mail" required="true" requiredMessage="email is required"> 
        <f:validator validatorId="emailValidator"/> 
       </h:inputText> 
       <h:message for="insurance-mail" styleClass="validation-error-msg insuarnce-validation"/> 
      </li> 
     </ul>          

     <h:commandLink value="SAVE POLICY INFORMATION" action="#{residenceBeans.saveInsuranceInfo}" styleClass="insurance-link-container"> 
      <f:param name="insSaved" value="saved"/> 
     </h:commandLink> 
    </div> 
</h:form> 

wenn Felder leer und Absenden des Formulars verlassen i die Validierungsmeldungen erwarte zu sein angezeigt, aber stattdessen bekomme ich die folgende Warnung:

21:20:47,671 INFO [javax.enterprise.resource.webcontainer.jsf.renderkit] (http--127.0.0.1-8080-3) WARNING: FacesMessage(s) have been enqueued, but may not have been displayed 
sourceId=insurance-form:insurance-company[severity=(ERROR 2), summary=(company is required), detail=(company is required)] 
sourceId=insurance-form:insurance-policy[severity=(ERROR 2), summary=(number is required), detail=(number is required)] 
sourceId=insurance-form:insurance-amount[severity=(ERROR 2), summary=(coverage amount is required), detail=(coverage amount is required)] 
sourceId=insurance-form:insurance-phone[severity=(ERROR 2), summary=(phone is required), detail=(phone is required)] 
sourceId=insurance-form:insurance-mail[severity=(ERROR 2), summary=(email is required), detail=(email is required)] 

bitte beraten, wie das zu beheben.

+0

Haben Sie das standardmäßige Benennungscontainer-Trennzeichen von ':' in '-' geändert? Übrigens stimmt das Attribut "gerendert" des Formulars nicht mit dem Wert "f: param" überein, sodass das gesamte Formular nach dem Senden überhaupt nicht gerendert wurde. Ist das nicht nur die Ursache für Ihr konkretes Problem? Aber wäre es nicht offensichtlich, dass es die ganze Form ist, die nicht auftauchte und nicht nur die Botschaften? – BalusC

+0

@BalusC, nein ich habe das Trennzeichen der ID nicht geändert: Versicherungsformular: Versicherungsfirma wie erwartet. Was raten Sie? –

+0

@BalusC, sollte ich stattdessen das gerenderte Attribut an den Eingängen verwenden? –

Antwort

7

Die Nachrichten wurden nicht angezeigt, da das gesamte Formular beim Postback überhaupt nicht gerendert wurde. Sie haben das zu rendernde Formular nur dann angewiesen, wenn der Anforderungsparameter insSaved den Wert editable hat. In der Submit-Schaltfläche wurde sie jedoch in saved geändert, so dass das Formular im Grunde niemals auf Postback gerendert wird und die eingeschlossenen Nachrichten damit auch nicht. Dies ist angesichts der Art und Weise, wie der Code eingerichtet wird, vollständig zu erwarten.

Wenn Sie das Formular trotzdem im Falle eines Validierungsfehlers beim Postback anzeigen möchten, müssen Sie das Attribut rendered entsprechend ändern. Ersetzen

<h:form id="insurance-form" rendered="#{(param['insSaved']=='editable')}"> 

von

<h:form id="insurance-form" rendered="#{(facesContext.postback and facesContext.validationFailed) or (param['insSaved'] == 'editable')}"> 
-1

ich dieses Problem erlebt, ist die Antwort, die primefaces Bibliothek zu löschen und fügen Sie dann wieder in die Bibliotheken-Liste.

Verwandte Themen