我有啊:outputText字段,用于显示特定模式中的金额.
例如.10000000需要格式化为1,00,00,000我使用<f:convertNumber />标签来实现此目的.我尝试在locale属性中添加hi_IN和en_IN,但结果格式化为10,000,000.然后通过应用具有以下值(#,##,## 0.00)的pattern属性尝试得到相同的结果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>
Run Code Online (Sandbox Code Playgroud)
制作自定义转换器如下,
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"));
}
}
}}
Run Code Online (Sandbox Code Playgroud)
然后尝试以下,
<h:outputText value="10000000" converter="currencyFormat"/>
Run Code Online (Sandbox Code Playgroud)
注:我用IBM ICU4J库转换号码,这是可以在这里
| 归档时间: |
|
| 查看次数: |
6299 次 |
| 最近记录: |