How to skip validation when a specific button is clicked?

后端 未结 1 1256
囚心锁ツ
囚心锁ツ 2020-11-28 06:41

I have a form with a validator on one field. I have two h:commandButtons: Ok and Cancel. When I input wrong data and click Cancel, I

相关标签:
1条回答
  • 2020-11-28 07:31

    In case you aren't using ajax, or are still on JSF 1.x, and you really need to invoke a business action in cancel() method (i.e. just reloading the page is insufficient), then your best bet is to add immediate="true" to the button. This way all input fields which don't have immediate="true" will be skipped in processing.

    <h:commandButton value="Cancel" action="#{bean.cancel}" immediate="true" />
    

    On JSF 2.x, much better is to submit the form by <f:ajax>, which by default only processes @this instead of @form.

    <h:commandButton value="Cancel" action="#{bean.cancel}">
        <f:ajax />
    </h:commandButton>
    

    If you want to navigate to another page here, add ?faces-redirect=true to the outcome in the cancel() method.

    Or, if you actually don't need to invoke any business action at all, then just use <h:button> wherein you directly specify the (implicit) navigation case outcome.

    <h:button value="Cancel" outcome="previouspage" />
    

    This will basically reload the page by a GET request. The <h:button> doesn't exist in JSF 1.x, but you can also just use plain HTML+JS for that.

    See also:

    • 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?
    0 讨论(0)
提交回复
热议问题