2014-09-18 64 views
1

我有一个包含f:validateRegex字段的p:inputText(PrimeFaces)。我试图确保输入的信息采用格式。摘录:是否f:validateRegex呈现给JavaScript?

<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:阿贾克斯似乎并不奏效(如果出现不正确的格式没有消息)。当我查看呈现的HTML时,我注意到f:validateRegex和f:ajax都是这样显示的,而不是呈现的HTML组件或javascript字段。所以,我的问题是:f:validateRegex应该呈现为JavaScript的客户端?如果是这样,为什么它不能正确渲染?

回答

1

没有。 JSF是一个HTML代码生成器。 <f:xxx>标签不是HTML。浏览器只能理解HTML,而不是JSF。

症状表明您忘记在父元素中声明f: XML名称空间。例如。

<html ... xmlns:f="http://xmlns.jcp.org/jsf/core"> 

这样,根本不应该看到与<f:validateRegex>有关的任何内容。它完全是服务器端。当您使用keyup(因此不是keyUp)时,<f:ajax>应翻译为某个HTML DOM事件属性中的脚本,例如onkeyup

+0

我在我的名字空间上收到“NLS丢失消息”警告。我相信我可能使用了不正确的名称空间。我使用了'xmlns:f =“http:/java.sun.com/jsf/core”' – chRyNaN 2014-09-18 17:18:31

+0

这就是旧的JSF 2.0/2.1命名空间,它应该在JSF 2.2上同样好用。尝试升级莫哈拉。在2.2.0/2.2.1/2.2.2版本中,XML名称空间注册中存在一些错误。如果错误仍然存​​在,那么只需忽略并运行它,并在浏览器中验证是否一切正常。如果是这样,那么它可能只是你的编辑器(IDE),而他们又需要升级。 – BalusC 2014-09-18 17:19:04

+0

好吧,会做谢谢 – chRyNaN 2014-09-18 17:20:00