【问题标题】:How can we make an inputText accept Numbers where we had currencySymbol="$" in a DataTable,in JSF, Primefaces?我们如何让 inputText 接受我们在 DataTable、JSF、Primefaces 中具有 currencySymbol="$" 的数字?
【发布时间】:2013-12-02 07:04:16
【问题描述】:

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

为此,我采取了:<f:convertNumber currencySymbol="$" type="currency"/> 工作正常。

DataTable 中的相同字段将作为输入字段用于提供金额。

但是,当我尝试将值插入为 123456.00 时,我遇到了 Error()。

仅接受accepting 前缀为$ 的值,仅接受eg: $123456.00

我的情况:即使我给它123456.00然后保存,我也必须能够获得价值。

我的代码:

  <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.

【问题讨论】:

    标签: jsf jsf-2 primefaces datatable


    【解决方案1】:

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

    $<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;
        }
    }
    

    【讨论】:

    • 它可以查看之前的 $ 符号,但它的格式不是 $123,456,789.00,而是 $123456789.00
    • @user2561626:是的:)。我的Converter 还没有这种能力。您需要对 Java 中的货币字符串格式进行一些研究以增强代码。应该很简单:)
    猜你喜欢
    • 2017-11-25
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多