Validation f:validateLongRange。验证数量巨大
我正在使用JSF2和PrimeFaces3.5。我有一个inputText,它必须是Long.MIN_值和Long.MAX_值之间的数字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}"
<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!"));
}
}