我有一个带有f:validateRegex字段的p:inputText(PrimeFaces)。我试图确保输入的信息遵循格式。片段:
<p:inputText id="usernameInput" required="true" validatorMessage="Invalid Email" value="#{sessionHandler.username}" >
<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/>
<f:ajax event="keyUp" render="emailMessage" />
</p:inputText>
<p:watermark for="usernameInput" value="Email"/>
<h:message id="emailMessage" />
f:validateRegex和f:ajax似乎没有工作(如果格式不正确,则不会显示任何消息)。当我查看渲染的HTML时,我注意到f:validateRegex和f:ajax都是这样出现的,而不是渲染的HTML组件或javascript字段。所以,我的问题是:f:validateRegex应该呈现为客户端的javascript吗?如果是这样,为什么它不能正确渲染?
答案 0 :(得分:1)
不。 JSF是一个HTML代码生成器。 <f:xxx>
标记不是HTML。浏览器只能理解HTML,而不是JSF。
症状表明您忘记在父元素中声明f:
XML命名空间。 E.g。
<html ... xmlns:f="http://xmlns.jcp.org/jsf/core">
这样,您根本不应该看到与<f:validateRegex>
相关的任何内容。它完全是服务器端。 <f:ajax>
应转换为某些HTML DOM事件属性中的脚本,例如onkeyup
,当您使用keyup
时(而不是keyUp
)。