我想测试inputText字段以查看其内容是否匹配任何内容,但至少有一个& (符号)。
当我在validateRegex的模式字段内测试&
或\&
或\\&
时,我总是收到此错误:
javax.faces.view.facelets.FaceletException:Error Parsing /index.xhtml:Error Traced [line:71] Le nom de l'identitédoitimmédiatementuivrelecaractère“&” danslaréférenced'endenté。
我得到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>
]]>
但我的inputText不再出现了。
答案 0 :(得分:5)
Facelets是一种基于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>
。
更新,<p:inputText>
中的空格导致正则表达式语法错误。删除它。
{{1}}
在JSF组件周围使用CDATA块根本不是正确的解决方案。它将XML转义整个内容,导致{{1}}被发出普通的香草,而不是组件的HTML表示。
答案 1 :(得分:1)
使用CDATA标记转义符号(&amp;)符号:
<![CDATA[
<h:outputText value="Sun & Moon" />
]]>
如果您想在Javascript中转换&符号,lt(&lt;)和gt(&gt;)符号,请在Javascript中添加CDATA部分,但请注释:
<script>
//<![CDATA[
funcion lessThan(a, b) {
return a < b; //no problems in Facelets
}
//]]>
</script>
答案 2 :(得分:0)
带引号的字符串检查是否有帮助? '&'