I have multiple forms, where I have mandatory fields and optional fields.
To submit such a form I require the validation on the required-attribute to be executed, which works fine. To cancel such a form I use the attribute immediate="true"
on the p:commandbutton
, which makes its action happen during the Apply Request Values-Phase as addressed here: How to skip validation when a specific button is clicked?
However, for large forms I want to provide the user with a Save-Button, so he can proceed later.
For just saving the current state I also want to ignore the validation of the required-attribute. However, using immediate="true"
is not working, because then my save method simple saves nothing, because the JSF lifecycle never hits the "UpdateModelValues"-Phase. (Acording to http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html )
So, how to bypass the required-check but not skip half the lifecycle?
To skip validation, add a immediate=”true” attribute to the cancel button.
A very common way to skip validation is by keeping the value for immediate attribute as 'true' for the UIComponents. Immediate attribute allow processing of components to move up to the Apply Request Values phase of the lifecycle. scenario: While canceling a specific action, system should not perform the validation.
Each Button creates an entry inside the Param-List as long as it's member of the form. So I simple applied a check for the presence of that entry to the "required" parameter:
<h:form id="form" prependId="true"> ... <p:inputText id="someId" required="#{param['form:save']==null}" ... /> ... <p:commandButton id="save" value="Save" /> <p:commandButton id="submit" value="Submit" /> <p:commandButton id="cancel" value="Cancel" immediate="true" /> </h:form>
When I click "Submit" the param['form:save']
is NULL
, which then turns the expression to true
so the validation is executed.
When I click "Save" the param['form:save']
is NOT NULL
(but empty!), which resolves to false
so the validation is ignored. (Or let's say JSF thinks it is not a required field due to the expression beeing evaluated to false
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With