有没有办法在 ZK 标签组件中格式化数字,看起来像
<label value="${each.value}" />
?值是双倍的,我想分隔数千等...我知道例如 doublebox 具有格式属性,但如果我只想将数字显示为标签怎么办?谢谢你的帮助。
问问题
8225 次
2 回答
2
功能要求
首先,我在 ZK 的跟踪系统上为此打开了一个功能请求,你可以在这里找到它。如果您需要更新,请按照此操作。
实施方式
事实上,根据您使用的模式和技术,有多种方法可以实现这一点。
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)}" />
有关此技术的更多信息可在此处获得。
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)"/>
有关此技术的更多信息,您可以参考此处。
于 2012-04-12T07:53:30.797 回答
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>
于 2013-07-17T12:54:21.410 回答