validateLength в JSF 1.2 по сравнению с JSF 2.1

Недавно я обновился с JSF 1.2 до JSF 2.1. Вот мой код:

Product Code: <h:inputText id="productCode" value="#{dataItem.productCode}" maxlength="25" disabled="#{dataItem.disabled}">
                        <f:validateLength minimum="2" maximum="25" />
                    </h:inputText>
                    <h:message for="productCode" errorClass="error" showSummary="false" />

Поведение validateLength в JSF 1.2 заключалось в том, что если мы введем значение «1» в поле «Код продукта», которое меньше минимально допустимого «2», я получу сообщение об ошибке «Значение меньше допустимого минимума« 2 » ". Но если я не ввожу какое-либо значение в поле «Код продукта», я не вижу никакого сообщения об ошибке.

Это поведение частично изменилось в JSF 2.1. Если я не укажу никакого значения для поля «Код продукта», я получу сообщение об ошибке «Значение меньше допустимого минимума« 2 »».

Действительно ли поведение изменило часть JSF 2.1?

Любые мысли или помощь по этому поводу очень ценятся.


person Sri    schedule 12.09.2012    source источник


Ответы (2)


На самом деле это была ошибка в JSF 1.2. Пустое поле необязательное не должно проверяться таким образом.

Если вы хотите проверить необходимость, используйте required="true".

<h:inputText ... required="true">

Если вы хотите управлять требуемым сообщением, установите атрибут requiredMessage (новый с JSF2):

<h:inputText ... required="true" requiredMessage="Please enter value">

Кстати, вы также можете управлять общим сообщением проверки с помощью validatorMessage (также новое, начиная с JSF2).

person BalusC    schedule 12.09.2012
comment
Я наблюдаю такое же поведение. Думаю, я запутался. В какой части ошибка? У меня нет обязательного атрибута, но пустые значения по-прежнему вызывают минимальную ошибку проверки. Это не то, что я хочу, я только хочу, чтобы это срабатывало, если есть значение или если оно требуется. У меня есть вопрос, опубликованный 6-7">здесь. - person Mickelback; 26.10.2012
comment
Ошибка в том, что <f:validateMinimum> также запускается для пустого необязательного поля. - person BalusC; 26.10.2012
comment
чтобы было ясно, это ошибка в 1.2 или 2.1? Я использую Glassfish 3.1 с Jsf 2.1.12, и я получаю поведение, что поле не является обязательным, но я все еще получаю срабатывание validteLength. Кроме того, просто добавлю, что мы уже довольно давно используем 2.1 на Tomcat без проблем... такое поведение стало наблюдаться только тогда, когда мы начали использовать Glassfish... есть какие-нибудь мысли? - person Mickelback; 26.10.2012

Вы можете настроить это поведение, добавив следующий параметр контекста:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>
person Gabriel Molina    schedule 20.10.2014