我有一个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>
答案 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的答案是完美的。