PrimeFaces Extensions ToolTip未应用f:convertNumber格式化问题求助
解决p:dataTable中pe:toolTip未应用f:convertNumber格式化的问题
这个问题的核心原因是title属性直接绑定了原始数值,<f:convertNumber>只会处理<h:outputText>的显示内容,并不会自动格式化title里的EL表达式结果。下面给你几种实用的解决方案:
方法1:利用JSF转换器API手动格式化title值
你可以在EL中直接调用Number转换器的getAsString方法,把原始数值转换成格式化后的字符串,这样title就会和表格单元格显示一致:
<h:outputText value="#{informeAux.vagonesKm}" title="#{facesContext.application.createConverter('javax.faces.Number').getAsString(facesContext, component, informeAux.vagonesKm)}"> <f:convertNumber maxFractionDigits="2" minFractionDigits="2" groupingUsed="true" decimalSeparator="," groupingSeparator="."/> </h:outputText>
注意:要确保
getAsString调用时的转换器参数和<f:convertNumber>的属性完全一致,比如千分位、小数点分隔符等,这样才能保证格式化结果统一。
方法2:在Bean中添加格式化方法
如果需要在多个地方复用这个格式化逻辑,或者格式化规则比较复杂,推荐在后端Bean中添加一个返回格式化后字符串的方法:
import java.text.DecimalFormat; public class InformeAux { // 原有属性vagonesKm private Double vagonesKm; // 添加格式化方法 public String getVagonesKmFormatted() { DecimalFormat df = new DecimalFormat("#,##0.00"); df.setDecimalSeparator(','); df.setGroupingSeparator('.'); return df.format(vagonesKm); } // 其他getter/setter方法 }
然后在页面中直接调用这个方法作为title值:
<h:outputText value="#{informeAux.vagonesKm}" title="#{informeAux.vagonesKmFormatted}"> <f:convertNumber maxFractionDigits="2" minFractionDigits="2"/> </h:outputText>
方法3:用pe:toolTip的contentSelector直接复用页面已格式化内容
这是最简洁的方式——既然单元格里已经有了格式化好的文本,我们可以让pe:toolTip直接读取这个文本作为tooltip内容,不用再处理格式化:
<h:outputText id="vagonesKmTxt" value="#{informeAux.vagonesKm}"> <f:convertNumber maxFractionDigits="2" minFractionDigits="2"/> </h:outputText> <pe:toolTip for="vagonesKmTxt" contentSelector="#vagonesKmTxt"/>
这种方式完全复用了页面上已有的格式化结果,不需要额外的EL调用或后端代码,非常适合简单场景。
内容的提问来源于stack exchange,提问作者gsanchez
相关产品推荐
相关产品推荐

