2

inputTextフィールドをテストして、その内容が少なくとも1つの&(アンパサンド)以外のものと一致するかどうかを確認したいと思います。

validateRegexのパターンフィールド内でテスト&する\&と、常に次のエラーが発生します。\\&

javax.faces.view.facelets.FaceletException:エラー解析/index.xhtml:エラートレース[行:71] Lenomdel'identitédoitimmédiatementsuivrelecaractère"&"danslaréférenced'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はもう表示されません。

4

3 に答える 3

5

Faceletsは、XMLベースのビューテクノロジーです。ビュー全体が構文的に有効なXMLである必要があります。のようなXML特殊文字&は、としてエスケープする必要が<あり、そのまま解釈されることになっている場合。>&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表現ではなくプレーンなバニラが出力されるようになります。

于 2012-11-20T02:18:59.133 に答える
1

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>
于 2012-11-19T21:10:31.893 に答える
0

引用符で囲まれた文字列チェックは役立ちますか?'&amp;'

于 2012-11-19T21:15:18.907 に答える