2012-04-12 7 views
1

は、ZKラベルコンポーネントのフォーマット番号を <label value="${each.value}" />のように表示する方法はありますか?値は倍であり、私は千などを分けたいと思います...私はダブルボックスのフォーマットプロパティを持っていることを知っていますが、私はちょうどラベルとして番号を表示したいのですが?助けてくれてありがとう。ZKOSSラベルの数値フォーマット

答えて

2

機能のリクエスト私はあなたがそれを見つけることができますhere ZKの追跡システムで、このための機能要求を開いているすべての

まず。更新が必要な場合は、この手順に従ってください。

を実装する

つの方法は、あなたが使用しているパターン&技術に応じて、これを実現するための実際の方法であります。

MVC & EL

あなたのZULファイルにあなたのための書式設定を行いますEL関数を作成することができます。まず、次のようなクラスを作成します。

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

これは小数点以下2桁の数字を出力します。第二に、あなたの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モデルを使用している場合があります...とにかく、今日は後でそれを試してみます。あなたの時間をありがとうTim! – Gatekeeper

+0

私はこのソリューションに奇妙な問題があります...私のコードはあなたの提案のようですが、 ''?<?xel-method prefix = "f" name = "formatDouble" class = "my.package .ElNumberFormatter " signature =" java.lang.String formatDouble(BigDecimal) "?>'、zkossは次のエラーをスローします: 'org.zkoss.zk.ui.UiException:file:/ C:/ Users ... w/main/pageIncomeEntry.zul:2:59:クラスが見つかりません:my.package.ElNumberFormatter'パッケージとクラス名を2回チェックしました。 – Gatekeeper

+0

私はtaglibを作成することでこの問題を解決し、現在動作しています... – Gatekeeper

関連する問題