【问题标题】:<f:convertNumber number pattern for displaying "10000000" as "1,00,00,000" - JSF2.0<f:convertNumber 用于将“10000000”显示为“1,00,00,000”的数字模式 - JSF2.0
【发布时间】:2013-05-08 05:26:25
【问题描述】:

我有一个 h:outputText 字段,用于以特定模式显示金额。

例如。 10000000 需要格式化为 1,00,00,000 我使用&lt;f:convertNumber /&gt; 标签来实现这一点。我尝试在语言环境属性中添加 hi_IN 和 en_IN,但结果被格式化为 10,000,000。然后尝试通过应用具有以下值(#,##,##0.00)的模式属性得到相同的结果 10,000,000.00。请推荐?

示例代码:

<h:outputText value="#{sampleBean.amount}">
    <f:convertNumber pattern="#,##,##0.00"/>
</h:outputText>

<h:outputText value="#{sampleBean.amount}">
   <f:convertNumber locale="hi_IN" />
</h:outputText>

<h:outputText value="#{sampleBean.amount}">
   <f:convertNumber locale="en_IN" />
</h:outputText>

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    如下制作自定义转换器,

    import com.ibm.icu.text.NumberFormat;
    import java.math.BigDecimal;
    import java.util.Locale;
    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.ConverterException;
    import javax.faces.convert.FacesConverter;
    
    @FacesConverter("currencyFormat")
    public class CurrencyFormat implements Converter {
    
    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
        return null;
    }
    
    @Override
    public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
        if (value == null) {
            return null;
        } else {
            if (value.toString().trim().equals("")) {
                return null;
            }
            try {
                Locale l=new Locale("en", "in");
                NumberFormat format = com.ibm.icu.text.NumberFormat.getNumberInstance(l);
                format.setMinimumFractionDigits(2);
                return format.format(new BigDecimal(value.toString()));
    
            } catch (Exception exception) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid Number"));
            }
        }
    }}
    

    然后尝试跟随,

    <h:outputText value="10000000" converter="currencyFormat"/>
    

    注意:我用IBM icu4j library转换数字,可用at here

    【讨论】:

      【解决方案2】:

      如果您正在寻找货币,您可以查看&lt;f:convertNumber /&gt;type="currency"。您将能够根据区域设置显示金额。您还可以使用 locale="YourLocale" 覆盖当前语言环境。

      当然,对于更多自定义目的,@Jitesh 的答案是完美的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 2011-12-07
        • 2014-05-12
        • 1970-01-01
        • 2014-10-17
        相关资源
        最近更新 更多