6

コンポーネントの値属性でem ダッシュを使用したいと考えていh:linkます。

これが私の試みです(現在は機能していません):

<h:link value="#{somethingHere} &mdash; #{anotherHere}">
    <f:param name="identifier" value="#{somethingHere.identifier}" />
</h:link>

これにより、FaceletsException次のようになります。

FaceletException: Error Parsing /index.xhtml: Error Traced[line: 13]
                The entity "mdash" was referenced, but not declared.
at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:394)
...

代わりに HTML アンカーを使用できることはわかっていますが、式言語(EL)式内でそれを行う方法はありますか? これを行う正しい方法は何ですか?

4

1 に答える 1

11

Facelets は XML ベースであり、XML パーサーによって処理されます。は&mdash;HTML エンティティであり、XML では認識されません。この Wikipedia ページにリストされている 、、、、および の 5 つだけがXML&quot;で認識されます。&amp;&apos;&lt;&gt;

Facelets/XML はデフォルトですでに UTF-8 を使用しており、HTML エンティティは基本的に UTF-8 以前の時代の残り物であり、UTF-8 ドキュメントでは必要ないため、実際の文字をプレーン/エンコードせずにテンプレートに入れることができます (提供されます)。エディターがファイルを UTF-8 として保存できることを確認します)。

つまり、単純に調整する

<h:link value="#{somethingHere} &mdash; #{anotherHere}">

<h:link value="#{somethingHere} — #{anotherHere}">

何らかの理由でこれがオプションでない場合は、代わりに、XML でa を表すために&#nnnn;使用するように、 format で数値文字参照を使用できます。数字のリファレンスは fileformat.info にあります: Unicode Character 'EM DASH' (U+2014)&#160;&nbsp;

エンコーディング

HTML エンティティ (10 進数)&#8212;

したがって、これはあなたのために行う必要があります:

<h:link value="#{somethingHere} &#8212; #{anotherHere}">

正確なエラーメッセージをさらに満たす代替手段は、doctypeでエンティティ参照を明示的に宣言することです。

<!DOCTYPE html [
    <!ENTITY mdash "&#8212;"> 
]>

ただし、文字が使用されているすべての XML ファイルでこれを繰り返す必要があるため、これは一般的な推奨事項/アプローチではありません。

于 2012-08-16T17:51:22.243 に答える