JSF, validateRegex and & (amp;amp;符号)



我想测试inputText字段,看看它的内容是否与至少一个&(&符号)以外的任何内容匹配。

当我测试 validateRegex 的&&\&内部模式字段时,我总是收到此错误:

javax.faces.view.facelets.FaceletException: Error Parsing/index.xhtml: Error Traced[line: 71] Le nom de l'identité doit immédiatement suivre le caractère "&" dans la référence d'entité.

我收到 500 错误...

我怎样才能逃脱这个角色?


更新

我测试过

<p:inputText id="player_name_register" value="#{login.name}">
    <f:validateRegex pattern="[&amp;]{3, 50}" />
</p:inputText>

但是当我用&&&&&&进行测试时,它不起作用。

我也测试了

<![CDATA[
    <p:inputText id="player_name_register" value="#{login.name}">
        <f:validateRegex pattern="[&amp;]{3, 50}" />
    </p:inputText>
]]>

但是我的输入文本不再出现。

Facelets是一种基于XML的视图技术。整个视图必须是语法上有效的 XML。XML特殊字符如&<>需要作为&amp;&lt;&gt;进行转义,当它们应该按原样解释时。

<f:validateRegex pattern="...&amp;..." />

(在这里,...代表正则表达式的其余部分)

CDATA 块不起作用,因为它基本上转义了整个内容,包括 JSF 组件。引用转义的 XML 字符是没有意义的。在被 Facelets XML 解析器解析后,&amp;再次变得&


根据您的更新进行更新,{3, 50}中的空格会导致正则表达式语法错误。删除它。

<p:inputText id="player_name_register" value="#{login.name}">
    <f:validateRegex pattern="[&amp;]{3,50}" />
</p:inputText>

在 JSF 组件周围使用 CDATA 块根本不是正确的解决方案。它将对整个内容进行 XML 转义,导致&lt;p:inputText&gt;以普通形式发出,而不是组件的 HTML 表示形式。

使用 CDATA 标记转义与号 (&) 符号:

<![CDATA[
<h:outputText value="Sun & Moon" />
]]>

如果你想在 Javascript 中转义 & 符号、lt (<) 和 gt (>) 符号,请在 Javascript 中添加 CDATA 部分,但要注释它:

<script>
    //<![CDATA[
    funcion lessThan(a, b) {
        return a < b; //no problems in Facelets
    }
    //]]>
</script>

带引号的字符串检查有帮助吗? '&amp;'

最新更新