我正在使用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值。我可以收到验证消息吗?
答案 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"/>