JSF,validateRegex和&(&符号)

Oli*_* J. 2 java regex jsf

我想测试inputText字段,看看它的内容是否匹配任何东西,但至少有一个&(&符号).

当我测试&\&\\&validateRegex的内侧的图案场,我总是收到此错误:

javax.faces.view.facelets.FaceletException:错误解析/index.xhtml:错误跟踪[line:71] Le nom de l'identitédoitimmédiatementuivrelecaractère"&"danslaréférenced'engeé.

我得到500错误......

我怎么能逃脱这个角色?


更新

我测试过了

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

但是当我用&&&&&&它测试时它不起作用.

我也测试过

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

但我的inputText不再出现了.

Bal*_*usC 5

Facelets是一种基于XML的视图技术.整个视图必须是语法上有效的XML.XML特殊字符喜欢&,<并且>需要被转义为&amp;,&lt;并且&gt;当它们被解释为原样时.

<f:validateRegex pattern="...&amp;..." />
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)

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