Here is my configuration:
- PrimeFaces: 4.0.4 (elite)
- OmniFaces: 1.6.3
- JSF: MyFaces 2.0.2
- Server: WebSphere 8.5.0.2
Some code (I only post the relevant part for better clarity):
<p:selectOneMenu value="#{viewModel.selectedContact}" required="true" converter="omnifaces.SelectItemsConverter">
<p:ajax event="change" listener="#{viewModel.updateContact}" update="area"/>
<f:selectItem itemValue="#{null}" itemLabel="#{msg.no_contact}" noSelectionOption="true" />
<f:selectItems value="#{viewModel.contacts}"/>
</p:selectOneMenu>
So here, we have a simple p:selectOneMenu
that contains a list of Contact
objects as well as a "No Contact" option. This field is required if I want to submit the form.
When a contact is selected in the list, the updateContact
method is called. This method will generate data that will be displayed in the area
section of the page updated by the AJAX call.
If I select the "No Contact" option, a validation error is triggered as this field is required, so the updateContact
method is not called. I would like the method to be called as I would need to reset some data then hide the area
section of the page.
I have tried using process="@this"
, immediate="true"
, but it doesn't work. With immediate="true"
, the selected Contact
is not passed to the updateContact
method.
So, what is the best way to bypass the validation of this field when selecting a null value?