2012-11-19 26 views
2

我想测试inputText字段来看看它的内容相匹配什么,但至少一个&(号)。JSF,validateRegex和&(和号)

当我测试&\&或validateRegex的\\&内部模式字段,我总是接收此错误:

javax.faces.view.facelets.FaceletException:错误解析/index.xhtml:错误示踪[行:71]乐NOM DE L'identitéDOITimmédiatementsuivre乐caractère “&” 丹斯拉提及此战争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不会再出现。

回答

5

Facelets的是一种基于XML的视图技术。整个视图必须是语法上有效的XML。 XML special characters&,<>需要转义为&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表示。

+0

谢谢,这是空间问题的原因。问题解决了! –

+0

不客气。 – BalusC

1

使用CDATA标签逃脱号(&)符号:在Javascript

<![CDATA[ 
<h:outputText value="Sun & Moon" /> 
]]> 

如果你想逃避符号,LT(<)和GT(>)符号,添加JavaScript中的CDATA节但发表评论:

<script> 
    //<![CDATA[ 
    funcion lessThan(a, b) { 
     return a < b; //no problems in Facelets 
    } 
    //]]> 
</script> 
+0

CDATA非常适用于JS代码,但不适用于JSF组件。请先尝试一下,然后查看生成的HTML输出。 – BalusC

0

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

+0

当试图打印小于(<)和大于(>)的其他符号时,这将无济于事。 –

+0

它不需要引用。 – BalusC

+0

我的答案是在java端检查,猜我误解了:( – r0ast3d