2

私は af:selectitem とその itemLabel を持っていて、ラベルをとても「きれい」にレンダリングしたいです!

問題:

<p:selectOneRadio id="selectRadio" value="#{somebean.somevalue}" layout="pageDirection" >
<f:selectItem itemLabel="#{msg['message.1']}" itemValue="1" />
<f:selectItem itemLabel="#{msg['message.2']}" itemValue="2" />
</p:selectOneRadio>

私のプロパティ i18n ファイル:

message.1=some message by {0}
message.2=another message by {0}

{0} を #{somebean.theUser} でインライン置換したい結果は次のようになります (太字を含む)。

some message by <b>HUSTON</b>

タグファイルでは、このようなことをする必要があります(または同様の方法で)

<f:selectItem itemLabel="#{msg['message.1']{'<b>'+somebean.theUser+'</b>'}}" itemValue="1" />

つまり、i18n 文字列パラメーターの置換を itemLabel タグに直接追加したいと考えています。

私は試してみまし <f:facet name="itemLabel">たが、何もありません。

誰かが私を助けることができますか?

アドバイスありがとう、

アガルタ

4

1 に答える 1

2

JSF では、マークアップ側からそれを行うことはできません。たとえば<h:outputFormat />、それを使用する方法はありません。

代わりに、単純に Bean を作成する必要があります。Bean は、プロパティ ファイルから内容を読み取り、それに応じてフォーマットします。

<p:selectOneRadio id="selectRadio" value="#{somebean.somevalue}" layout="pageDirection" >
<f:selectItem itemLabel="#{helperbean.someMessage}" itemValue="1" />
<f:selectItem itemLabel="#{helperbean.anotherMessage}" itemValue="2" />
</p:selectOneRadio>

それはあなたのBeanのJSF部分でした:

public String getSomeMessage() {
  // Actually you need some common access helper, it is just simplified example
  String messagePattern = null;
  try {
    ResourceBundle rb = ResourceBundle.getBundle("path/to/properties/file");
    String messagePattern = rb.getString("message.1");
    return MessageFormat.format(messagePattern, somebean.getTheUser());
  } catch (MissingResourceException mre) {
     logger.warn("Missing resource file or resource key", mre);
     return "!message.1!"; // That will show you where the problem is
  }
}

ローカライズ可能性に関するいくつかの追加ポイント:

  1. 意味のあるキー名を使用してください。「message.1」のようなものは、翻訳者にコンテキストを提供しません。あなたが何をしようとしているのかわかりませんが、おそらく "some-module.select.message.radio.message.sent.by.pattern" の方が良いでしょう - 翻訳者は a) どこに表示されるかを知る必要があります。 b) このテキストの目的は何ですか (説明、メッセージ パターン、一般的なテキスト、ウィンドウ/ダイアログのタイトル、ボタンのキャプションなど)。そのようなコンテキストを必ず提供してください。

  2. メッセージ自体に書式タグを含めるようにしてください。つまり、メッセージはmessage.1=some message by <b>{0}</b>プロパティ ファイルで次のようになります。この種のタグを削除する (または他の強調手段に置き換える) 必要がある頻度に驚かれることでしょう。あなたは RTL 言語で何かをしているようで、太字のフォントはあまりうまく機能しないので、特に注意する必要があります。

于 2012-08-14T17:47:34.940 に答える