在我在JSF中的Web应用程序中,一些验证程序,例如长度验证程序<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
为什么这些消息会显示,如果它们运行良好且无问题,则会发生事件?
答案 0 :(得分:5)
它只是告诉我们没有处理这些标签的id
属性。实际上,这些标签不支持id
属性。删除它。
<f:validateLength for="txtDemo" maximum="10" minimum="2"/>
<f:validateRegex for="txtDemo" pattern="[0-9]*" />
此for
属性在此构造中是不必要的。你也可以安全地删除它。只有在复合组件内的输入上定位验证器时,for
属性才适用。
无关,自1998年的HTML 4.01以来<center>
元素已弃用。也将其删除。在包含固定宽度的块元素上使用CSS margin: 0 auto
。