1

Facelets ページには、さまざまな<h:inputText>コンポーネント<h:outputText>があり、それらはすべて同じコンバーターを必要とします。

次のように、すべてのパラメーターを使用してコンバーターを繰り返すことは避けたいと思います。

<h:inputText id="bla" value="#{mybean.val}" >
  <f:convertNumber locale="en" maxFractionDigits="3" minFractionDigits="3"/>
</h:inputText>
[...]
<h:outputText id="bla2" value="#{mybean.val2}" >
  <f:convertNumber locale="en" maxFractionDigits="3" minFractionDigits="3"/>
</h:outputText>
[...]
<h:inputText id="bla3" value="#{mybean.val3}" >
  <f:convertNumber locale="en" maxFractionDigits="3" minFractionDigits="3"/>
</h:inputText>

これらの繰り返しを避ける最善の方法は何ですか?

を使用できると思います<ui:include>が、それは、1 行だけ別のファイルを用意する必要があることを意味し、少しばかげているようです。代替手段はありますか?

4

1 に答える 1

3

コンバーターをサブクラス化し、コンストラクターでデフォルトを設定します。

@FacesConverter("defaultNumberConverter")
public class DefaultNumberConverter extends NumberConverter {

    public DefaultNumberConverter() {
        setLocale(Locale.ENGLISH);
        setMinFractionDigits(3);
        setMaxFractionDigits(3);
    }

}

そして、次のように使用します。

<h:inputText id="bla" value="#{mybean.val}" converter="defaultNumberConverter" />
[...]
<h:outputText id="bla2" value="#{mybean.val2}" converter="defaultNumberConverter" />
[...]
<h:inputText id="bla3" value="#{mybean.val3}" converter="defaultNumberConverter" />

さらに一歩進めるには、目的のコンポーネントをラップするタグ ファイルまたは複合ファイルを作成します。

<my:inputNumber id="bla" value="#{mybean.val}" />
[...]
<my:outputNumber id="bla2" value="#{mybean.val2}" />
[...]
<my:inputNumber id="bla3" value="#{mybean.val3}" />
于 2013-06-04T13:57:55.630 に答える