2013-05-08 23 views
3

我有一個h:outputText字段,用於顯示特定模式的金額。<f:顯示「10000000」爲「1,00,00,000」的convertNumber數字模式 - JSF2.0

例如, 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> 

回答

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

2

如果您正在尋找貨幣,您可以看看<f:convertNumber />type="currency"。您將能夠根據區域設置顯示金額。您也可以使用locale="YourLocale"覆蓋當前的語言環境。

當然,爲了更多的自定義目的,@Jitesh的答案是完美的。