JSF 2.0在actionListener中验证失败后禁止调用操作

时间:2013-06-11 11:16:58

标签: java jsf jsf-2 action actionlistener

我有一个添加一些数据的对话框:

<p:commandButton id="save" 
    actionListener="#{adminNationalController.saveTeam}" 
    action="#{adminManageInternationalTournamentController.updateTeamList}"
    value="#{msg.save}" ajax="true"
    icon="ui-icon-check"
    onmousedown="return validateSubmit('addCombinedTeamForm', ['name'],'lang')"
    oncomplete="if (!args.validationFailed) addCombinedTeamDialog.hide()"
    process = "@form"
    update="lang, name, :manageTournament:dataList,:manageTournament:scroll, :menuForm:growl, :manageTournament:nationalTeam">

    <f:setPropertyActionListener 
        value="#{adminNationalController.newTeamBean}"
        target="#{adminManageInternationalTournamentController.newTeamBean}"/>

</p:commandButton> 

saveTeam我尝试验证数据,但action案例验证失败。

是否可以禁止通话?

2 个答案:

答案 0 :(得分:6)

从动作监听器中,当你想要中止其余动作监听器的处理和最终动作时,你应该抛出AbortProcessingException

但是,更好的方法是在输入组件上使用真正的Validator。这样就可以绕过整个调用动作阶段。

另见:

答案 1 :(得分:1)

在您的saveTeam中,如果验证失败,您可以在当前FacesContext实例上调用FacesContext#renderResponse()以跳过所有后续阶段,然后转到呈现回复阶段。

只需添加以下行:

   FacesContext.getCurrentInstance().renderResponse();

如果验证在saveTeam中失败。

修改

我的建议是使用真正的validator进行验证目的