根据the TLD,convertNumber接受ValueExpressions作为其pattern属性。但它似乎不起作用(JSF 1.2 RI):
<h:outputText value="#{Test.numberValue}">
<f:convertNumber pattern="#{Test.numberPattern}" />
</h:outputText>
输出
0.0210000000000000013045120539345589349977
(Test.numberValue评估为0.021
,Test.numberPattern评估为"0.00%"
)
如果我使用String文字,一切正常:
<h:outputText value="#{Test.numberValue}">
<f:convertNumber pattern="0.00%" />
</h:outputText>
输出
2,10%
h:outputText
是h:dataTable
列的一部分,如果重要的话。
答案 0 :(得分:2)
h:outputText
是h:dataTable
列的一部分,如果重要的话。
发现实际上很重要,请参阅this question about convertDateTime in a datatable。据此(感谢BalusC,一如既往),这是我的解决方案:
自定义转换器:
public class DynamicNumberConverter extends NumberConverter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
setPattern((String) component.getAttributes().get("pattern"));
return super.getAsObject(context, component, value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
setPattern((String) component.getAttributes().get("pattern"));
return super.getAsString(context, component, value);
}
}
标记:
<h:outputText value="#{Test.numberValue}">
<f:converter converterId="DynamicNumberConverter" />
<f:attribute name="pattern" value="#{Test.numberPattern}"/>
</h:outputText>