Слушатели изменения значений не могут использоваться для изменения изменяемых значений (к вашему сведению: они вызываются на этапе проверки). Посмотрите на конвертеры и валидаторы - они предотвращают попадание нежелательных данных в вашу модель.
/** validator="#{myBean.checkThreeCharsLong}" */
public void checkThreeCharsLong(FacesContext context,
UIComponent component, Object value) {
boolean failedValidation = (value == null)
|| (value.toString().trim().length() < 3);
if (failedValidation) {
((EditableValueHolder) component).setValid(false);
// message to user
String clientId = component.getClientId(context);
FacesMessage message = new FacesMessage(
"value should be at least three characters long");
context.addMessage(clientId, message);
}
}
Одна область, которая запутывает многих, - это то, что отправленная форма, содержащая недопустимые данные, предотвратит запуск действий. Это сделано специально - это предотвращает работу бизнес-логики с неверными данными. Если вам нужно запустить действие, даже если в запросе содержатся недопустимые данные, вы не можете использовать модель проверки JSF, и вам придется включить проверку в логику действия.