我想测试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="[&]{3, 50}" />
</p:inputText>
但是当我用&&&&&&
进行测试时,它不起作用。
我也测试了
<![CDATA[
<p:inputText id="player_name_register" value="#{login.name}">
<f:validateRegex pattern="[&]{3, 50}" />
</p:inputText>
]]>
但是我的输入文本不再出现。
Facelets是一种基于XML的视图技术。整个视图必须是语法上有效的 XML。XML特殊字符如&
、<
和>
需要作为&
、<
和>
进行转义,当它们应该按原样解释时。
<f:validateRegex pattern="...&..." />
(在这里,...
代表正则表达式的其余部分)
CDATA 块不起作用,因为它基本上转义了整个内容,包括 JSF 组件。引用转义的 XML 字符是没有意义的。在被 Facelets XML 解析器解析后,&
再次变得&
。
根据您的更新进行更新,{3, 50}
中的空格会导致正则表达式语法错误。删除它。
<p:inputText id="player_name_register" value="#{login.name}">
<f:validateRegex pattern="[&]{3,50}" />
</p:inputText>
在 JSF 组件周围使用 CDATA 块根本不是正确的解决方案。它将对整个内容进行 XML 转义,导致<p:inputText>
以普通形式发出,而不是组件的 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>
带引号的字符串检查有帮助吗? '&'