【问题标题】:How to convert number using f:convertNumber on JSF form?如何在 JSF 表单上使用 f:convertNumber 转换数字?
【发布时间】:2015-12-09 12:36:18
【问题描述】:

我有一个输入字段,它采用双精度只能有这种模式之一:

pattern="#,###,##0.00"

我已经做到了:

<h:inputText id="value"
             required="true"
             converterMessage="#{msg.invalidValue}"
             requiredMessage="#{msg.required}"
             value="#{technicalBean.value}">

    <f:convertNumber pattern="#,###,##0.00" />
</h:inputText>

<h:message  for="value"/>

但它没有按我的意愿工作。它接受字符,如果第一个输入是像8A 这样的数字并且只转换数字。

【问题讨论】:

    标签: jsf jsf-2.2


    【解决方案1】:

    如果你想限制用户只能输入数字和.,你可以创建javascript函数并在onkeypress属性中调用它,或者像这样内联

    <h:inputText id="value" required="true"
                     onkeypress="if ((event.which == 8) || (event.which == 46)) return true; if (event.which &lt; 48 || event.which &gt; 57) return false;"
                     converterMessage="#{msg.invalidValue}"
                     requiredMessage="#{msg.required}"
                     value="#{technicalBean.value}">
        <f:convertNumber  pattern="#,###,##0.00" />
    </h:inputText>
    <h:message  for="value" />
    

    这将只允许数字、. 和退格(数字是按钮的 ASCII 值)。

    如果您对新框架持开放态度,PrimeFaces 得到了 &lt;p:inputMask&gt; component,您可以将其用于此目的。

    【讨论】:

    • 我没有限制用户的问题,但是按键没有给我足够的验证,因为用户可以复制和粘贴错误的数据,谢谢你的回答。
    • 关于掩码仅限于用户。
    • 您所做的不是验证而是转换器,如果您想要验证,您应该制作验证器或使用 JSR303 Bean 验证,如 @Pattern 并在用户按下键验证输入后。
    • 我想使用模式查看旧数据而不是验证,我只想验证数字。
    • 如果您不想让double 值在数字后带有字母字符,我相信您也会遇到类似here 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多