2013-06-04 46 views
0

在Facelets頁面中,我有各種<h:inputText><h:outputText>組件,它們都需要相同的轉換器。如何避免Facelets頁面中的重複/使用常量?

我想避免與它的所有參數重複的轉換器,像這樣:

<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>,但這意味着我必須爲單行提供單獨的文件,這似乎有點愚蠢。有其他選擇嗎?

回答

2

轉換器的子類,可以在構造器中設置默認值。如下

@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" /> 

爲了進一步獲得步驟,create a tag file or perhaps a composite包裹所需組分:

<my:inputNumber id="bla" value="#{mybean.val}" /> 
[...] 
<my:outputNumber id="bla2" value="#{mybean.val2}" /> 
[...] 
<my:inputNumber id="bla3" value="#{mybean.val3}" />