将ValueExpression用于f:convertNumber模式属性

时间:2014-02-12 08:10:07

标签: jsf

根据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:outputTexth:dataTable列的一部分,如果重要的话。

1 个答案:

答案 0 :(得分:2)

  

h:outputTexth: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>