F:validateLongRange。验证数量巨大

时间:2013-09-13 11:23:41

标签: validation jsf primefaces validatelongrange

我正在使用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>

在attributeBean中:

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

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

2 个答案:

答案 0 :(得分:0)

这是对f:转换器做的。转换器尝试转换100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
很久了。最大长度= 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之间。但我不知道这是否有问题。

答案 1 :(得分:0)

使用帮助<f:converter converterId="javax.faces.Long"/>

解决了此问题