我的场景:当我将数据库中的数据检索到数据表时,将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.
答案 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;
}
}