1

ResourceBundles によって管理されるコンテンツを含む多言語サイトがあります。JSF ナビゲーションを使用して、段落コンテンツを使用して Web サイト セクションへのリンクを挿入するにはどうすればよいですか。

例 1: 必要な HTML 出力

<p>Simply <a href="contact.xhtml">contact us</a> to find out more.</p>

例 2: 上記を実現する単純なファセット

<p>Simply <h:link outcome="contact" value="contact us"/> to find out more.</p>

望ましい結果: ResourceBundle を使用した場合と同じ

フェイスレット

<p>
    <h:outputText value="${template['paragraph']}">
        <f:param>
            <h:link outcome="contact" value="${template['contactUs']}"/>
        </f:param>
    </h:outputText>
</p>

リソースバンドル

paragraph=Simply {0} to find out more.
contactUs=contact us
4

1 に答える 1

6

問題は正確には JSF ナビゲーション ルールではありませんが、JSF コンポーネントをバンドル パラメーターとして指定するために使用することはできず<f:param>、プレーンなバニラ HTML の子は言うまでもありません。<f:param>また、ではご利用いただけ<h:outputText>ませんのでご注意ください<h:outputFormat>

とにかく機能要件を達成するためには、エスケープされたフレーバーで HTML を自分で書き留める必要があり<f:param value>ます。

<h:outputFormat value="#{template['paragraph']}" escape="false">
    <f:param value="&lt;a href='#{request.contextPath}/contact.xhtml'&gt;#{template['contactUs']}&lt;/a&gt;" />
</h:outputFormat>

または、その属性に対して行っているViewHandler#getBookmarkableURL()ように JSF を利用したい場合は、<h:link>outcome

<h:outputFormat value="#{template['paragraph']}" escape="false">
    <f:param value="&lt;a href='#{facesContext.application.viewHandler.getBookmarkableURL(facesContext, '/contact', null, false)}'&gt;#{template['contactUs']}&lt;/a&gt;" />
</h:outputFormat>

これに遭遇したのはあなたが初めてではなく、回避策がぎこちないため、JSF ユーティリティ ライブラリOmniFacesは最近<o:param>、値が指定されていない場合に子を param 値としてエンコードすることをサポートするコンポーネントを更新しました。OmniFaces 1.5 以降では、次のように使用できるはずです。

<h:outputFormat value="#{template['paragraph']}" escape="false">
    <o:param><h:link outcome="contact" value="#{template['contactUs']}" /></o:param>
</h:outputFormat>
于 2013-03-23T19:57:17.310 に答える