3

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

例如。10000000 需要格式化为 1,00,00,000 我使用<f:convertNumber />标签来实现这一点。我尝试在语言环境属性中添加 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>

制作自定义转换器如下,

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 库来转换数字,可在此处获得

4

2 回答 2

5

制作自定义转换器如下,

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 库来转换数字,可在此处获得

于 2013-05-08T05:58:54.160 回答
2

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

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

于 2013-05-08T06:15:55.337 回答