13

JSF XHTMLページに&&が含まれているJavascriptがよくあるので、次のようにエンコードする必要があります。&&

たとえば、JSFXHTMLページファイルに次のように配置すると、次のようになります。

I am an & sign

エラーが発生します:

The entity name must immediately follow the '&' in the entity reference

これを修正する1つの方法は、「&」を&書くだけでは望ましくないと思う「&」を変更することであるように思われます。

また、Javascriptで「&」を使用する場合は、JavascriptをCDATAタグでラップできるようです。CDATAタグでラップすると、「&」をとしてエスケープせずに書くこと&ができます。これは、ページに読みやすいJavascriptコードを含めることができるようにするための優れた回避策です。

<script>しかし、タグ内にないためにコードをCDATAタグで簡単にラップできないときに、ページの他の場所でリテラル「&」を使用したい場合はどうなりますか?これらの場合は常に「&」をエスケープする必要が&amp;ありますか?

値をエスケープする機能を使用しようとしていることに注意してください。問題を修正できないようです。

4

4 に答える 4

15

Faceletsは、XMLベースのビューテクノロジーです。XMLパーサーによって特別に扱われる文字は、文字通りに表示する場合はXMLエスケープする必要があります。それはとりわけカバーし<ます&。は、その<ようなXMLタグの開始を示し<foo>&は、そのようなXMLエンティティの開始を示します&#38;。asとasをエスケープする<必要があります。&lt;&&amp;

Faceletsでそれらをエスケープしないと、次の例外が発生します。<

javax.faces.view.facelets.FaceletException:エラー解析/test.xhtml:エラートレース[行:42]要素のコンテンツは、整形式の文字データまたはマークアップで構成されている必要があります。

そして次のものは&

javax.faces.view.facelets.FaceletException:エラー解析/test.xhtml:エラートレース[行:42]エンティティ名は、エンティティ参照の「&」の直後に続く必要があります。

これは特にJavaScriptとは関係ありません。これは、「プレーンテキスト」を含むビュー全体に適用されます。これらの文字は、たまたまJavaScript演算子でもあります。これを回避する方法はありません。それがXMLの指定方法です。ただし、JavaScriptでは、CDATAブロックのエスケープや使用を回避する方法がもう1つあります。それは、または.jsでロードする独自のファイルにそのJSコードを配置することです。<script><h:outputScript>

ELには、&&エスケープする必要のある演算子もあります&amp;&amp;が、幸い、この演算子の別名であるand演算子があります。

参照:

于 2012-06-18T19:52:51.497 に答える
1

&はXMLの特殊文字であるためです:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

于 2012-06-18T16:22:27.027 に答える
1

参考までに、JSFページに(c)文字を書いてみました。&copyを書いたときにエラーが発生しました: "copyは参照されていますが、宣言されていません"&copy;を書いたとき 生の弦を取り戻しました。

Unicode表記を使用して特殊文字を表示できます:©

于 2014-02-23T22:09:16.430 に答える
-2

このコードは私のために働いた:

<h:outputText value="&amp;copy;" escape="false" />
于 2016-06-06T09:18:14.427 に答える