2

我想测试 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>
]]>

但我的 inputText 不再出现。

4

3 回答 3

5

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 表示。

于 2012-11-20T02:18:59.133 回答
1

使用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>
于 2012-11-19T21:10:31.893 回答
0

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

于 2012-11-19T21:15:18.907 回答