单击特定按钮时如何跳过验证?
Posted
技术标签:
【中文标题】单击特定按钮时如何跳过验证?【英文标题】:How to skip validation when a specific button is clicked? 【发布时间】:2011-08-29 02:35:15 【问题描述】:我有一个在一个字段上带有验证器的表单。我有两个h:commandButton
s:Ok 和 Cancel。当我输入错误数据并单击 Cancel 时,我会收到一条验证消息。当我点击 cancel 时验证器不运行,我该怎么办?
【问题讨论】:
【参考方案1】:如果您没有使用 ajax,或者仍在使用 JSF 1.x,并且您确实需要在 cancel()
方法中调用业务操作(即仅重新加载页面是不够的),那么您最好的选择是将immediate="true"
添加到按钮。这样,所有没有immediate="true"
的输入字段都将在处理过程中被跳过。
<h:commandButton value="Cancel" action="#bean.cancel" immediate="true" />
在 JSF 2.x 上,最好通过<f:ajax>
提交表单,默认情况下只处理@this
而不是@form
。
<h:commandButton value="Cancel" action="#bean.cancel">
<f:ajax />
</h:commandButton>
如果您想在此处导航到另一个页面,请将?faces-redirect=true
添加到cancel()
方法的结果中。
或者,如果您实际上根本不需要调用任何业务操作,那么只需使用<h:button>
,您可以在其中直接指定(隐式)导航案例结果。
<h:button value="Cancel" outcome="previouspage" />
这基本上会通过 GET 请求重新加载页面。 <h:button>
在 JSF 1.x 中不存在,但您也可以使用纯 html+JS。
另见:
Why was "immediate" attribute added to the EditableValueHolders? How to navigate in JSF? How to make URL reflect current page (and not previous one) How to let validation depend on the pressed button?【讨论】:
跟进:如果我有例如怎么办?<h:selectOneMenu
和 onchange="submit()"
?如果下拉列表中的新选择触发发回服务器,如何跳过验证? (我必须坚持 jsf 1.1,叹息......)
@BalusC 你知道跳过验证阶段但处理更新模型值阶段的方法吗?这在 JSF 2 中可行吗?
@SurpriseCoconut 是的,这可以在 JSF 2 中通过删除验证器来实现,仅适用于 PhaseListener 类中的 PROCESS_VALIDATIONS 阶段以上是关于单击特定按钮时如何跳过验证?的主要内容,如果未能解决你的问题,请参考以下文章