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>,但这意味着我必须为一行创建一个单独的文件,这似乎有点傻。有替代方案吗?

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 回答