在JSF中为非小数字格式化double

时间:2011-03-22 19:05:44

标签: jsf format double converter

我有一个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代码。只有双重的呈现。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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