有没有办法在ZK标签组件中格式化数字看起来像
<label value="${each.value}" />
?值是双倍的,我想分开数千等...我知道doublebox例如有格式属性,但如果我只想显示数字作为标签怎么办?谢谢你的帮助。
答案 0 :(得分:2)
功能请求
首先,我在ZK的跟踪系统上打开了一个功能请求,您可以找到它here。如果您想要更新,请关注此项。
实施方式
实际上有一些方法可以实现这一点,具体取决于什么模式和&amp;你正在使用的技术。
MVC&amp; 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)}" />
有关此技术的更多信息可用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。
答案 1 :(得分:1)
来自文档:http://books.zkoss.org/wiki/ZUML_Reference/EL_Expressions/Core_Methods/formatNumber
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<zk>
<label value="${c:formatNumber(2332315231, '$ ###,###,###.00')}" />
</zk>