【发布时间】:2015-01-18 20:04:02
【问题描述】:
我为输出 java.math.BigDecimal 创建了自定义转换器。当 BigDecimal 为 0.00 或 null 我想输出一个破折号。
这是我的 XHTML
<p:dataTable value="#{bean.data}" var="item">
<p:column>
<h:outputText value="#{item.currentValue}">
<f:converter converterId="my.bigDecimalConverter" />
</h:outputText>
</p:column>
</p:dataTable>
我遇到的问题是当#{item.currentValue} 为null 时,转换器中的getAsString 方法未被调用。
@FacesConverter("my.bigDecimalConverter")
public class BigDecimalConverter implements Converter {
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (context == null || component == null) {
throw new NullPointerException();
}
if (value == null) {
System.out.println("null=");
return "--";
}
System.out.print("Class=" + value.getClass());
if (value instanceof String) {
System.out.println("Str=" + value);
return (String) value;
}
if (value instanceof BigDecimal) {
BigDecimal bd = (BigDecimal)value;
if (bd.equals(new BigDecimal("0.00"))) {
return "--";
} else {
return bd.toPlainString();
}
}
return "";
}
}
我说它没有被调用,因为当 BigDecimal 为 null 时,我没有收到错误并且没有 println 语句输出。当 BigDecimal 不是 null 时,它按预期工作并且“Class=class java.math.BigDecimal” 被打印出来,当 BigDecimal 为 0.00 时,我确实在页面上输出了 --。
我正在使用 JSF 2.1、Mojarra 2.1.27
我还使用以下内容来测试我的转换器。
<h:outputText value="#{null}">
<f:converter converterId="my.bigDecimalConverter" />
</h:outputText>
阅读这个问题,转换器似乎应该使用null 值。
https://stackoverflow.com/a/19093197/50262
【问题讨论】:
-
您在使用 Mojarra 吗?哪个具体版本?
-
@fonkap 是的,Mojarra 2.1.27
-
@Tiny 我将转换器更改为带有
@RequestScoped的@ManagedBean并删除了@FacesConverter注释并按照您的建议使用了<f:converter>中的绑定。除了null之外,我得到的结果与以前一样。