2012-04-12 73 views
1

有沒有什麼辦法來格式化ZK標籤組件,它看起來像像 <label value="${each.value}" />多少?值是雙打,我想分開成千上萬等...我知道雙盒例如具有格式屬性,但如果我只是想顯示數字作爲標籤?謝謝你的幫助。數字格式

回答

2

功能要求

首先我已經打開了這對ZK的跟蹤系統功能要求,你可以找到它here的。如果你想更新,請按照這個。實施

方法有在執行這一取決於你使用的是什麼模式&技術事實的方式。

MVC & EL

您可以創建一個EL函數會做的格式爲你在ZUL文件。首先創建如下類:

public class FormatElNumber { 
    public static String formatStock(double stock) { 
     final NumberFormat nf = NumberFormat.getInstance(); 
     nf.setMaximumFractionDigits(2); 
     return nf.format(stock); 
    } 
} 

這將輸出帶有兩位小數的數字。其次,你需要添加到您的ZUL文件的頂部:

<?xel-method prefix="c" name="formatStock" class="demo.grid.hierarchy.FormatElNumber" 
    signature="java.lang.String formatStock(double)"?> 

然後,當你有一個標籤,你可以做如下:

<label style="color:red;" value="${c:formatStock(each.averageHigh)}" /> 

更多infomration這種技術可用here

MVVM

的MVVM實際上是更容易實現,你所創造的被稱爲一個轉換器,例如(請注意這個類是未經測試,但你的想法)。

public class NumberFormatConverter implements Converter { 

    @Override 
    public Object coerceToBean(Object val, Component comp, BindContext ctx) { 
     return null; 
    } 

    @Override 
    public Object coerceToUi(Object val, Component comp, BindContext ctx) { 

     if(!(val instanceof Integer)) { 
      throw new IllegalArgumentException("The argument must be a number!"); 
     } 

     final Object tmp = ctx.getConverterArg("length"); 
     int length = 0; 

     if(tmp instanceof Integer) { 
      length = (Integer)tmp; 
     } 

     final NumberFormat nf = NumberFormat.getInstance(); 
     nf.setMaximumFractionDigits(length); 

     return nf.format(val); 
    } 

} 

然後,所有你在ZUL文件做的是指定您希望使用一個轉換器的值,例如:

<label value="@load(vm.message) @converter(vm.myConverter)"/> 

關於這個技術,你可以參考here更多的信息。

+0

酷!我已經看到了@converter的方式來做到這一點,但在某些情況下,我們正如你所描述的那樣使用MVC模型......無論如何,我一定會在今天晚些時候嘗試。謝謝你的時間添! – Gatekeeper 2012-04-12 08:23:35

+0

我有這個解決一個奇怪的問題......我的代碼是像你這樣的建議,但是當我試圖用'<?XEL-方法PREFIX =「F」 NAME =「formatDouble」級=「my.package顯示ZUL頁面.ElNumberFormatter」 簽名= 「java.lang.String中formatDouble(小數)」>',zkoss拋出錯誤:'org.zkoss.zk.ui.UiException:文件:/ C:/用戶... W /主/ pageIncomeEntry.zul:2:59:未找到類:my.package.ElNumberFormatter'我檢查了包和類名兩次...對此有任何想法? – Gatekeeper 2012-04-12 09:43:31

+0

好吧,我通過創建taglib解決了這個問題,現在它工作... – Gatekeeper 2012-04-12 10:09:06