f:validateRegex是否渲染为javascript?

时间:2014-09-18 16:52:53

标签: jsf primefaces jsf-2.2 mojarra

我有一个带有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吗?如果是这样,为什么它不能正确渲染?

1 个答案:

答案 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)。