【问题标题】:How to authorize comma and dot in an input text with JSF如何使用 JSF 在输入文本中授权逗号和点
【发布时间】:2014-04-09 06:59:25
【问题描述】:

我正在使用一个包含输入数字的表单(它代表对象的价格)。

输入文本是用 JSF 创建的(代码不是我的):

<h:inputText value="#{myObject.unitPrice}" maxlength="10"
                        required="true" >
    <f:ajax event="change" listener="#{myObject.doCalculateTotalPrice}" />
    <f:validator validatorId="montantValidator" />
    <f:convertNumber pattern="##0.00" locale="en"/> 
</h:inputText>

此输入有效,但我们的客户想要使用点和逗号(不要问我为什么!)。是否可以使用模式来允许“,”和“。”?或者我应该创建一个 javascript 函数来用 '.' 替换 ',' 吗?

提前谢谢你。

【问题讨论】:

  • 您可以创建自定义Converter。但如果被要求做同样的事情,我只会走 JS 的路。
  • 如果客户希望在预览数据时看到自己的逗号返回怎么办?
  • @AdrianMitev 那么唯一的选择是将值存储为文本并为数字创建不同的属性。从数据模型的角度来看,这将是令人毛骨悚然的。如果用户坚持,请尝试说服客户不要这样做。解释国际化,并且您将让用户设置其区域设置,以便所有数字(和日期)都以他的区域设置格式显示给他。
  • 当然,还要向客户解释这意味着额外的工作量(成本/时间)
  • 感谢您的所有回答,我已经创建了一个自定义转换器。我做了一件简单的事情:@Override public Object getAsObject(FacesContext pFacesContext, UIComponent pUIComponent, String pValue) { if (pValue != null) { return Double.parseDouble(pValue.replaceAll(",", ".")); } 返回空值; } 目前,我不计算数字。但是,第一个版本有效!

标签: javascript jsf jsf-2


【解决方案1】:

谢谢 TronchDeYack!

这里有一些代码可以删除一个明确的解决方案。

自定义号码类型、号码格式...

转换器

@FacesConverter("decimalNumberConverter")
public class DecimalNumberConverter implements Converter {

    public Object getAsObject( FacesContext fc, UIComponent uic, String value ) {
        if( value != null )
            return new BigDecimal( value.replace(',','.') );
        return null;
    }

    public String getAsString( FacesContext fc, UIComponent uic, Object object ) {
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMaximumFractionDigits( Integer.valueOf((String)uic.getAttributes().get("maxFractionDigits")) );
        nf.setMinimumFractionDigits( Integer.valueOf((String)uic.getAttributes().get("minFractionDigits")) );
        return nf.format(object);
    }
}

输入

<p:inputText value="#{bean.myNumber}" >
    <f:converter converterId="decimalNumberConverter" />
    <f:attribute name="minFractionDigits" value="2"/>
    <f:attribute name="maxFractionDigits" value="4"/>
</p:inputText>

【讨论】:

    猜你喜欢
    • 2022-09-22
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2021-11-06
    相关资源
    最近更新 更多