我们如何让一个inputText接受我们在DataTable中使用currencySymbol =“$”的数字,JSF,Primefaces?

时间:2013-12-02 07:04:16

标签: jsf jsf-2 primefaces datatable

我的场景:当我将数据库中的数据检索到数据表时,将Amount格式显示为$123,456.00

为了实现这一点,我采取了:<f:convertNumber currencySymbol="$" type="currency"/>工作正常。

DataTable中的相同字段将作为输入金额的输入字段。

但是,当我尝试将值插入123456.00时,我正面临Error()。

accepting仅接受使用$ eg: $123456.00预先修复的值。

我的情况:即使我将其作为123456.00提供然后保存,我也必须能够获取价值。

mycode的:

  <p:column headerText="Amount" styleClass="ralign">
        <p:inputText value="#{bean.amount}">
            <f:convertNumber currencySymbol="$" type="currency"/>
            <pe:keyFilter regEx="/[0-9.]/i"/>
        </p:inputText>
    </p:column>

如果我尝试将号码插入12345,则错误引发0:j_idt109: '123456' could not be understood as a currency value.

1 个答案:

答案 0 :(得分:0)

您不应在输入文本字段中显示$符号。通常,货币符号将显示为字段的前缀。例如,以下解决方案是最简单的解决方案:

$<p:inputText value="#{bean.amount}">
    <pe:keyFilter regEx="/[0-9.]/i"/>
</p:inputText>

如果您真的必须在输入文本字段中放置$符号,则可以随时编写自己的Converter。我认为下面的人应该做的工作:

@FacesConverter("converter.currencyConverter")
public class CurrencyConverter implements Converter {
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && value.startsWith("$")) value = value.subString(1);
        return Double.parseDouble(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return "$" + value;
    }
}