当点击特定按钮时如何跳过验证?

31

我有一个表单,在其中一个字段上有一个验证器。我有两个h:commandButton确定取消。当我输入错误的数据并单击取消时,会收到一个验证消息。我该怎么做才能使验证器在单击取消时不运行?

1个回答

64

如果您没有使用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>
如果你想要在这里导航到另一个页面,在cancel()方法中的结果后添加?faces-redirect=true。或者,如果你实际上根本不需要调用任何业务操作,那么只需使用<h:button>,其中直接指定(隐式)导航案例结果即可。
<h:button value="Cancel" outcome="previouspage" />
这将基本上通过GET请求重新加载页面。 <h:button> 在JSF 1.x中不存在,但您也可以使用普通的HTML+JS来实现同样的功能。
另请参阅: - 为什么在EditableValueHolders中添加“immediate”属性? - 如何在JSF中导航? 如何使URL反映当前页面(而不是上一个页面) - 如何让验证依赖于按下的按钮?

跟进:如果我有一个带有 onchange="submit()"<h:selectOneMenu>,该如何实现呢?如果下拉菜单中的新选择触发了向服务器的提交,则如何跳过验证?(我必须坚持使用 JSF 1.1,唉...) - sl3dg3
1
@BalusC,您知道有什么方法可以跳过验证阶段,但是处理更新模型值阶段吗?在JSF 2中是否可能? - FuryFart
@SurprisedCoconut 是的,在 JSF 2 中,通过在您的 PhaseListener 类中仅为 PROCESS_VALIDATIONS 阶段删除验证器,这是可能的。 - User0123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接