Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSF skip Required-Validation without immediate=true

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?

like image 997
dognose Avatar asked Jan 15 '13 10:01

dognose


People also ask

How to skip validation in JSF?

To skip validation, add a immediate=”true” attribute to the cancel button.

How to skip validation in adf?

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.


1 Answers

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)

like image 94
dognose Avatar answered Sep 17 '22 13:09

dognose