时间:2013-05-08 05:26:26

标签: jsf-2

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

EG。 10000000需要格式化为1,00,00,000 我使用<f:convertNumber />标记来实现此目的。我尝试添加hi_IN&amp; en_IN在locale属性中,但结果格式为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>

2 个答案:

答案 0 :(得分: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 library转换号码,可用at here

答案 1 :(得分:2)

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

当然,为了更多的定制目的,@ Jitesh的答案是完美的。