2013-12-23 2 views
0

Мы переходим от JSF 1.2 к JSF2. Мы столкнулись с вопросом в validation.We использовании Apache MyFaces 2 и богатые лица 4.3 Ниже приведен код XHTML:Вопрос валидатора в JSF2

<h:form id="form">  
      <ui:include src="panel1.xhtml"/> 

       <h:commandButton id="btn1" value="Submit" action="#{bean.submit}"/> 

</h:form> 

panel1.xhtml содержит пользовательский компонент, как показано ниже:

<h:panelGrid columns="2"> 

       <h:outputText value="Enter Phone"/>         
       <h:inputText id="compId" value="#{map['Phone']}" size="12" maxlength="20" required="true" 
       validator="#{validator.validatePhone}"/> 

      <!-- other components omitted --> 
</h:panelGrid> 

public void validatePhone(FacesContext arg0, UIComponent arg1, Object obj) 
      throws ValidatorException { 

     String phoneVal = (String) obj; 

     if(phoneVal .length() <5){ 
      //rest of the code is omitted 
     } 

}

Проблема заключается в том, что значение телефона не вводится (поддерживается пустым), и форма представляется, следующие наблюдения.

JSF 2: validator.validatePhone вызывается со значением OBJ объекта (в методе validatePhone) как нулевое

JSF 1.2: требуется = "истина" атрибут принимает в действие первый и validator.validatePhone вообще не вызывается все (если в поле «Телефон» нет значения), и отображаются ошибки .

Вопрос:

1) Почему validator.validatePhone вызывается для JSF 2, даже если нет никакого значения в поле Phone? 2) Почему происходит изменение поведения в JSF 1.2 и JSF 2 для вышеуказанного случая?

ответ

1

Причина несогласованности в том, что значения JSF2, null не подтверждают валидацию по умолчанию. От the Javadocs:

Для валидатор, чтобы быть полностью совместимым с версией 2, а затем в спецификации, он не должен пройти валидацию на нуль или пустых значения, если это специально не предназначено для решения нулевых или пустых значений

Чтобы поддержать поведение проверки от JSF1.2, используйте параметр javax.faces.VALIDATE_EMPTY_FIELDS контекста:

<context-param> 
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name> 
    <param-value>false</param-value> 
</context-param> 
+0

благодарит за help.Adding контекста-пары, как показан на выше работал точно так, как в JSF 1.2 – Atul

+0

Добро пожаловать @Atul – kolossus

Смежные вопросы