即使字符串到数字的转换失败,FacesContext isValidationFailed 也会返回 false
FacesContext isValidationFailed is returning false even when string to numeric conversion is failed
我的表格有很多值,每个值都有自己的验证。为简单起见,我在这里只使用整数和字符串。
<form jsf:id="aaaa" >
<input type="text"
jsf:id="number-field"
jsf:value="#{managedBean.bean.value1}"
jsf:converterMessage="Error Integer"
</input>
<input type="text"
jsf:id="text-field"
jsf:value="#{managedBean.bean.value2}"
jsf:converterMessage="Error Text"
</input>
<button jsf:id="reset-data-button"
jsf:action="#{managedBean.save}" jsf:immediate="true">
submit
<f:ajax execute="@form" render="@form/>
</button>
</form>
value1 是整数,value2 是字符串。
在我的 bean 中,我手动验证字段并存储到数据库中。我不想多次显示错误消息,所以我添加了 immediate true。
在我的豆子里
public void save() {
if (value1.valid() && value2.valid() && facesContext.isValidationFailed()) {
//do some action
}
}
虽然 I have entered string value in value1 which is integer field
我得到 facesContext.isValidationFailed() as false
但应该是真的。
我这里是不是做错了。
我正在使用 mojarra 2.2.8
命令按钮上的立即属性意味着 action="#{managedBean.save}"
在 APPLY_REQUEST
值阶段之后立即执行。这造成的问题是 value1
和 value2
那时还没有设置到表单条目,因此任何依赖于该条件的逻辑都会失败。
您在这里应该做的是将这些输入组件标记为 immediate="true"
并向组件添加适当的验证器。这种组合将确保组件在执行 save
方法的同一步骤中得到验证。但是,您仍然无法访问经过验证的输入值;直到请求处理的 UPDATE_MODEL_VALUES
阶段才会发生,在 save
方法执行很久之后
我的表格有很多值,每个值都有自己的验证。为简单起见,我在这里只使用整数和字符串。
<form jsf:id="aaaa" >
<input type="text"
jsf:id="number-field"
jsf:value="#{managedBean.bean.value1}"
jsf:converterMessage="Error Integer"
</input>
<input type="text"
jsf:id="text-field"
jsf:value="#{managedBean.bean.value2}"
jsf:converterMessage="Error Text"
</input>
<button jsf:id="reset-data-button"
jsf:action="#{managedBean.save}" jsf:immediate="true">
submit
<f:ajax execute="@form" render="@form/>
</button>
</form>
value1 是整数,value2 是字符串。
在我的 bean 中,我手动验证字段并存储到数据库中。我不想多次显示错误消息,所以我添加了 immediate true。
在我的豆子里
public void save() {
if (value1.valid() && value2.valid() && facesContext.isValidationFailed()) {
//do some action
}
}
虽然 I have entered string value in value1 which is integer field
我得到 facesContext.isValidationFailed() as false
但应该是真的。
我这里是不是做错了。
我正在使用 mojarra 2.2.8
命令按钮上的立即属性意味着 action="#{managedBean.save}"
在 APPLY_REQUEST
值阶段之后立即执行。这造成的问题是 value1
和 value2
那时还没有设置到表单条目,因此任何依赖于该条件的逻辑都会失败。
您在这里应该做的是将这些输入组件标记为 immediate="true"
并向组件添加适当的验证器。这种组合将确保组件在执行 save
方法的同一步骤中得到验证。但是,您仍然无法访问经过验证的输入值;直到请求处理的 UPDATE_MODEL_VALUES
阶段才会发生,在 save
方法执行很久之后