如何格式化p:outputLabel值中的数字?JSF非Java方案需求
解决方案
方法1:EL中直接实例化DecimalFormat格式化
直接在视图的EL表达式里创建DecimalFormat实例并格式化数值,全程无需修改Java代码:
<p:outputLabel value="#{bundle['my.bundle.name']} - #{new java.text.DecimalFormat('0').format(Myclass.current.amount)}"/>
- 格式串
'0'会强制以整数形式显示,彻底避免科学计数法,10000000会被格式化为10000000;如果需要保留小数位,可改为'0.00'这类格式串,按需调整。
方法2:用EL 3.0静态方法调用(需容器支持)
若你的Web容器支持EL 3.0(如Tomcat 8+、WildFly 8+),可以直接调用String.format静态方法:
<p:outputLabel value="#{bundle['my.bundle.name']} - #{String.format('%.0f', Myclass.current.amount)}"/>
%.0f会将double四舍五入为整数显示,若要截断小数则用%d格式符。
方法3:自定义EL函数(适合多场景复用)
如果需要在多个视图中复用该格式化逻辑,可自定义EL函数:
- 编写工具类:
public class NumberFormatUtils { public static String formatNoScientificNotation(double number) { return new java.text.DecimalFormat("0").format(number); } }
- 在WEB-INF下创建标签库文件
number-functions.taglib.xml:
<?xml version="1.0" encoding="UTF-8"?> <facelet-taglib version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <namespace>http://yourdomain.com/number-functions</namespace> <function> <function-name>formatNoSci</function-name> <function-class>com.yourpackage.NumberFormatUtils</function-class> <function-signature>java.lang.String formatNoScientificNotation(double)</function-signature> </function> </facelet-taglib>
- 在
web.xml中注册标签库:
<context-param> <param-name>javax.faces.FACELETS_LIBRARIES</param-name> <param-value>/WEB-INF/number-functions.taglib.xml</param-value> </context-param>
- 在xhtml中引入并使用:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:nf="http://yourdomain.com/number-functions"> ... <p:outputLabel value="#{bundle['my.bundle.name']} - #{nf:formatNoSci(Myclass.current.amount)}"/> </html>
所有方案均为JSF视图层面的处理,无需修改后端Java代码,符合你的要求。
内容的提问来源于stack exchange,提问作者Владимир Царьков
相关产品推荐
相关产品推荐

