I have specific use case for JSF validation. For example I have an inputText
field:
<p:inputText id="input" required="#{myBean.required}" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}">
<p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/>
</p:inputText>
Value of input is number (in some cases it can also be a string, because this is part of composite component, but problem is better described if we assume this is a number). This input is part of the form, at the end of form I have submit button:
<p:commandButton value="Save" actionListener="#{myBean.save}"/>
What are my requests:
name
with some value.name
. This is also case when i remove text which is already entered in input, remove focus from component (press TAB for example) and in that case AJAX request should also be processed and name input will also be cleared.How I can disable validation of this input field in case when it is empty, and just for this ajax event?
Let the input's required
attribute check if the save button is pressed or not (which can be identified by the presence of its client ID in the request parameter map as available by implicit EL variable #{param}
).
<h:form>
<p:inputText ... required="#{param.containsKey(save.clientId) and myBean.required}" />
<p:commandButton binding="#{save}" ... />
</h:form>
(note: do not bind it to a bean property! the code is as-is)
This way it would only evaluate true
when the save button is actually pressed.
Or, if you have problems with binding
and/or don't have a problem hardcoding the button's client ID:
<h:form id="formId">
<p:inputText ... required="#{param.containsKey('formId:buttonId') and myBean.required}" />
<p:commandButton id="buttonId" ... />
</h:form>