Прежде всего, это поведение JSF по умолчанию: если ввод недопустим, он не записывается в модель.Таким образом, вы должны изменить это поведение вручную, например, с помощью Event-Listener.
Добавьте следующий метод к вашему компоненту:
public void setModelValueToNullIfValidationFailed(ComponentSystemEvent event) throws AbortProcessingException {
UIInput input = (UIInput) event.getComponent();
if (input.isValid()) {
return;
}
input.getValueExpression("value").setValue(FacesContext.getCurrentInstance().getELContext(), null);
}
Этот метод проверяет, не прошла ли проверка компонента.Если это так, то для модели устанавливается нулевое значение.
Добавьте событие f: к вашему p: autoComplete:
<p:autoComplete ...>
...
<f:event type="postValidate" listener="#{newCtrlr.setModelValueToNullIfValidationFailed}" />
</p:autoComplete>