【问题标题】:Does f:validateRegex render to javascript?f:validateRegex 是否呈现为 javascript?
【发布时间】:2014-11-13 03:00:31
【问题描述】:

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

【问题讨论】:

    标签: jsf primefaces jsf-2.2 mojarra


    【解决方案1】:

    不。 JSF 是一个 HTML 代码生成器。 &lt;f:xxx&gt; 标签不是 HTML。浏览器只理解 HTML,不理解 JSF。

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

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

    这样,您根本不会看到与&lt;f:validateRegex&gt; 相关的任何内容。它完全是服务器端。当您使用keyup 时,&lt;f:ajax&gt; 应转换为某个 HTML DOM 事件属性中的脚本,例如 onkeyup(因此不是 keyUp)。

    【讨论】:

    • 我的命名空间收到“NLS 丢失消息”警告。我相信我可能使用了不正确的命名空间。我用xmlns:f="http:/java.sun.com/jsf/core"
    • 这是旧的 JSF 2.0/2.1 命名空间,但在 JSF 2.2 上应该同样适用。尝试升级 Mojarra。在 2.2.0/2.2.1/2.2.2 版本中,XML 命名空间注册存在一些错误。如果错误仍然存​​在,那么只需忽略并运行它并在浏览器中验证是否一切正常。如果是这样,那么很可能只是您的编辑器(IDE)需要升级。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多