尽管JSF中的某些验证器运行良好,但控制台上仍会显示一些错误消息或警告

Bha*_*esh 1 validation jsf facelets

在我使用JSF的Web应用程序中,某些验证器(例如长度验证器<f:validateLength></f:validateLength>,正则表达式验证器)<f:validateRegex></f:validateRegex>和其他一些验证器在加载JSF页面时即使工作正常也没有问题,也会发出一些错误,甚至可能是警告。

这里不需要JSF ManagedBean,并且以下代码中显示的Submit按钮与之无关,因为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>
Run Code Online (Sandbox Code Playgroud)


在上面的代码中,尽管验证器<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
Run Code Online (Sandbox Code Playgroud)

如果这些消息运行正常且没有问题,为什么会显示这些消息?

Bal*_*usC 5

只是说id这些标签的属性没有被处理。实际上,这些标签不支持id属性。去掉它。

<f:validateLength for="txtDemo" maximum="10" minimum="2"/>
<f:validateRegex for="txtDemo" pattern="[0-9]*" />
Run Code Online (Sandbox Code Playgroud)

for顺便说一下,该属性在此构造中是不必要的。您也可以安全地删除它。for仅当在复合组件内部的输入上定位验证器时,该属性才适用。

也可以看看:


具体问题无关,从1998年HTML 4.01开始不推荐使用<center>元素。也将其删除。而是在包含块元素的固定宽度上使用CSS 。margin: 0 auto