0

我正在使用 JSF 2 和 primefaces 3.5。我有一个 inputText,它必须是 Long.MIN_VALUE 和 Long.MAX_VALUE 之间的数字。

<p:inputText id="startRange" value="#{attributeBean.attribute.startRange}">
<f:convertNumber />
<f:validateLongRange minimum="#{attributeBean.minimumValue}" 
                     maximum="#{attributeBean.maximumValue}"/>
</p:inputText>

在属性豆中:

public Long getMinimumValue(){
  return Long.MIN_VALUE;
}
public Long getMaximumValue(){
  return Long.MAX_VALUE;
}

当我输入一个巨大的数字,如 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 时,验证消息不会出现。如果回到这个表单中的一个 inputText 字段是 9,223,372,036,854,775,807 的值。我可以收到验证消息吗?

4

2 回答 2

0

好吧,这是对 f:converter 所做的。转换器尝试转换100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
为长。long = 9,223,372,036,854,775,807 的最大值,因此转换器运行良好:-)

但我猜这种行为不是你想要的。所以你可以通过这种方式自己验证。将 actionListener 添加到您的命令按钮:actionListener="#{attributeBean.validateLong}"并删除它:

<f:validateLongRange minimum="#{attributeBean.minimumValue}" 
                     maximum="#{attributeBean.maximumValue}"/>

并在您的 bean 中添加这样的方法:

public void validateLong() 
{ 
 if(startRange.compareTo(Long.MIN_VALUE) > 0 && startRange.compareTo(Long.MAX_VALUE) < 0)
 {
    //Do bussiness logic
 }
 else
 {
     //Throw message
      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Not good!"));
 }        
}  

请记住,您的上述检查范围介于:-9223372036854775807 和 9223372036854775806 之间。但我不知道这是否有问题。

于 2013-09-13T13:18:33.393 回答
0

这个问题在帮助下得到解决<f:converter converterId="javax.faces.Long"/>

于 2013-09-13T19:24:32.930 回答