【问题标题】:Format a double for non-fractional numbers in JSF在 JSF 中为非小数格式化双精度数
【发布时间】:2011-03-22 19:05:43
【问题描述】:

我有一个 inputText,它从用户那里获取一个值并绑定到一个 double。如果值为“5000”,后续页面将显示为“5000.0”。 有什么方法可以格式化它,如果用户输入一个非小数,它就不会显示小数?

示例:
用户输入“5000” 显示“5000”
用户输入“5000.1” 显示“5000.1”

<h:inputText value="#{sessionScope.eventDO.area}" id="areaInTxtId">
    <f:convertNumber pattern="###0"/>
</h:inputText>

我尝试使用下面的 f:convertNumber 标记,但出现此错误:

java.lang.ClassCastException: java.lang.Long 不能转换为 java.lang.Double

我不想更改任何 Java 代码。只介绍双份。

【问题讨论】:

    标签: jsf format double converter


    【解决方案1】:

    如果您没有找到模式,您可以编写自己的 NumberConverter 扩展。我从来没有尝试过,但它应该像这样工作:

    @FacesConverter(value="ExampleConverter")
    public class ExampleConverter extends NumberConverter {
    
      String getAsString(FacesContext context, UIComponent component,Object value) {
        // call super.getAsString(...) and cut trailing .0
      }
    }
    

    以这种方式在 facelet 中使用转换器:

    <h:inputText value="#{sessionScope.eventDO.area}" id="areaInTxtId">
        <f:converter converterId="exampleConverter" />
    </h:inputText>
    

    【讨论】:

      【解决方案2】:

      转换器只会转换数字以供进一步使用。如果您想在与用户交互时添加特定行为,请尝试使用 javascript "onkeyup" 事件并使用提供的数据进行操作。演示文稿是用户特定的,因此应该在服务器之外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多