JSF,validateRegex和& (符号)

时间:2012-11-19 21:00:24

标签: java regex jsf

我想测试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="[&amp;]{3, 50}" />
</p:inputText>

但是,当我使用&&&&&&进行测试时,它无效。

我也测试了

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

但我的inputText不再出现了。

3 个答案:

答案 0 :(得分:5)

Facelets是一种基于XML的视图技术。整个视图必须是语法上有效的XML。 & <>&amp;需要在&lt;&gt;<f:validateRegex pattern="...&amp;..." /> 转义为...按原样解释。

&amp;

(此处,&表示正则表达式的其余部分)

CDATA块无法正常工作,因为它基本上会转义整个内容,包括JSF组件。引用转义的XML字符毫无意义。在由Facelets XML解析器解析后,{3, 50}再次变为<p:inputText id="player_name_register" value="#{login.name}"> <f:validateRegex pattern="[&amp;]{3,50}" /> </p:inputText>


根据您的更新

更新&lt;p:inputText&gt;中的空格导致正则表达式语法错误。删除它。

{{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)

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