Хотя некоторые валидаторы в JSF работают хорошо, на консоли появляются некоторые сообщения об ошибках или, возможно, некоторые предупреждения - PullRequest
1 голос
/ 03 ноября 2011

В моем веб-приложении в JSF некоторые валидаторы, такие как валидатор длины <f:validateLength></f:validateLength>, валидатор регулярных выражений <f:validateRegex></f:validateRegex> и некоторые другие, выдают сообщение об ошибке, возможно, предупреждение, даже если они работают нормально, без проблем, когда страница JSF загружена.

JSF ManagedBean здесь не нужен, и кнопка отправки, представленная в следующем коде, не имеет ничего общего, поскольку Ajax запускается по событию valueChange текстового поля, заданного .

Ниже приведен простой код страницы JSF.


<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <title>Demo</title>
</h:head>
<h:body>
    <h:form>
        <center><br/><br/><br/>
        <h:inputText id="txtDemo" required="true" requiredMessage="Mandatory." 
            validatorMessage="The field should contain al least 10 digits">

            <f:validateLength id="lenValidator" for="txtDemo" maximum="10" 
            minimum="2"/>

            <f:validateRegex pattern="[0-9]*" for="txtDemo" id="txtPattern"/>

            <f:ajax id="txtAjax" event="valueChange" execute="txtDemo msg" 

            render="txtDemo msg"/>
        </h:inputText><br/>

        <h:message id="msg" for="txtDemo" showDetail="true" style="color:red"/>
        <br/>
        <h:commandButton id="btnSubmit" value="Submit"/>
        </center>
    </h:form>
</h:body>


В приведенном выше коде, хотя валидаторы <f:validateLength></f:validateLength> и <f:validateRegex></f:validateRegex> работают хорошо, валидатор длины не допускает менее 2 и более 10 символов, а валидатор регулярного выражения гарантирует, что поле должно содержать только цифры, красные сообщения появляются на консоли, когда загружается эта страница JSF. Сообщения отображаются следующим образом.

SEVERE: /Restricted/TempTags.xhtml @12,93 id="lenValidator" Unhandled by MetaTagHandler for type javax.faces.validator.LengthValidator

SEVERE: /Restricted/TempTags.xhtml @13,82 id="txtPattern" Unhandled by MetaTagHandler for type javax.faces.validator.RegexValidator

Почему отображаются эти сообщения, если они нормально работают без проблем?

1 Ответ

5 голосов
/ 03 ноября 2011

Это просто говорит о том, что атрибут id этих тегов не обрабатывается.Действительно, эти теги не поддерживают атрибут id.Удалите его.

<f:validateLength for="txtDemo" maximum="10" minimum="2"/>
<f:validateRegex for="txtDemo" pattern="[0-9]*" />

Атрибут for, кстати, не нужен в этой конструкции.Вы также можете безопасно удалить его.Атрибут for применяется только при нацеливании валидаторов на входы внутри составных компонентов.

См. Также:


Не связано к конкретной проблеме, элемент <center> устарел начиная с HTML 4.01 в 1998 году. Также удалите его.Вместо этого используйте CSS margin: 0 auto на элементе блока с фиксированной шириной.

...