在JSF中为非小数设置双精度格式

在JSF中为非小数设置双精度格式,jsf,format,double,converter,Jsf,Format,Double,Converter,我有一个inputText,它从用户那里获取一个值,并绑定到一个double。如果值为“5000”,后续页面将显示为“5000.0”是否有任何方法将其格式设置为,如果用户输入非小数,它将不会显示小数? 示例: 用户输入“5000” 显示“5000” 用户输入“5000.1” 显示“5000.1” 我尝试使用下面的f:convertNumber标记,但出现以下错误: java.lang.ClassCastException: 无法将java.lang.Long强制转换为 java.lang

我有一个inputText,它从用户那里获取一个值,并绑定到一个double。如果值为“5000”,后续页面将显示为“5000.0”是否有任何方法将其格式设置为,如果用户输入非小数,它将不会显示小数?

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


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

java.lang.ClassCastException: 无法将java.lang.Long强制转换为 java.lang.Double


我不想更改任何Java代码。只有双。

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

如果找不到模式,您可以编写自己的
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>

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