2012-10-29 10 views
5

mam formularz z walidacji wejścia w następujący sposób:ostrzeżenie zostały skolejkowany ale nie mogły być wyświetlane

<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> 

po opuszczeniu pola puste i wysłaniu formularza Oczekuję wiadomości walidacji być wyświetlany, ale zamiast otrzymuję następujące ostrzeżenie:

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)] 

Proszę doradzić jak to naprawić.

+0

Czy zmienił się domyślny znak separatora kontenerów nazw od ':' do '-'? Nawiasem mówiąc, atrybut 'renderowany 'formularza nie pasuje do wartości' f: param', więc po przesłaniu cały formularz nie zostałby w ogóle wyrenderowany. Czy to nie jest tylko przyczyna twojego konkretnego problemu? Ale czy nie byłoby oczywiste, że to cała forma, która się nie pojawiła, a nie tylko wiadomości? – BalusC

+0

@ BalusC, nie, nie zmieniłem separatora, który wygląda id: forma ubezpieczenia: firma ubezpieczeniowa zgodnie z oczekiwaniami. co radzisz? –

+0

@BalusC, więc zamiast tego powinienem użyć atrybutu renderowanego na wejściach? –

Odpowiedz

7

Komunikaty nie są wyświetlane, ponieważ cały formularz nie jest renderowany w ogóle na poczcie zwrotnej. Poinformowano Cię, że formularz ma być renderowany tylko wtedy, gdy parametr żądania o numerze insSaved ma wartość editable. Jednak w przycisku przesyłania została zmieniona na saved, więc formularz zasadniczo nigdy nie jest renderowany na poczcie zwrotnej, a załączone wiadomości również nie. Jest to w pełni oczekiwane zachowanie ze względu na sposób konfigurowania kodu.

Jeśli mimo to chcesz wyświetlać formularz w przypadku błędu sprawdzania poprawności w przypadku odświeżenia, musisz odpowiednio zmienić jego atrybut rendered. Wymienić

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

przez

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

doświadczyłem tego problemu, odpowiedź jest, aby usunąć bibliotekę primefaces a następnie ponownie dodać do listy bibliotek.

Powiązane problemy