Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation f:validateLongRange。验证数量巨大_Validation_Jsf_Primefaces_Validatelongrange - Fatal编程技术网

Validation f:validateLongRange。验证数量巨大

Validation f:validateLongRange。验证数量巨大,validation,jsf,primefaces,validatelongrange,Validation,Jsf,Primefaces,Validatelongrange,我正在使用JSF2和PrimeFaces3.5。我有一个inputText,它必须是Long.MIN_值和Long.MAX_值之间的数字 <p:inputText id="startRange" value="#{attributeBean.attribute.startRange}"> <f:convertNumber /> <f:validateLongRange minimum="#{attributeBean.minimumValue}"

我正在使用JSF2和PrimeFaces3.5。我有一个inputText,它必须是Long.MIN_值和Long.MAX_值之间的数字

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

当我输入像1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000这样的大数字时,验证消息不会出现。如果在inputText字段中返回此表单,则返回值为9223372036854775807。我可以得到一个验证消息吗?

这就是f:converter。转换器尝试转换
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

很长一段时间。a长的最大值=9223372036854775807,因此转换器工作良好:-)

但我想这种行为不是你想要的。因此,您可以通过这种方式自己验证它。将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!"));
 }        
}  
public void validateLong()
{ 
if(startRange.compareTo(Long.MIN_值)>0&&startRange.compareTo(Long.MAX_值)<0)
{
//做生意的逻辑
}
其他的
{
//抛出消息
FacesContext.getCurrentInstance().addMessage(空,新的FacesMessage(“不好”));
}        
}  

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

通过帮助解决了此问题

您是否有
h:message
-标记?当然可以。我这样使用它:我不明白长变量startRange如何保持一个大于long.MAX\u值的值(startRange.compareTo(long.MAX\u值)?)。我尝试使用侦听器,但只有当值小于Long.MAX_值时,它才起作用。我的解决方案会检查Long是否大于MAX-1,这样才能得到验证消息。您的原始输入保持不变
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!"));
 }        
}