Вопрос о Icefaces и valueChangeListener - PullRequest
0 голосов
/ 29 апреля 2009

Я использовал icefaces 1.7.1, и я использую ice: inputText со значением valueChangeListener следующим образом:

<ice:inputText value="#{myBean.name}" valueChangeListener="#{myBean.nameChangedListener}"/>

В MyBean.java у меня есть:

public void nameChangedListener(ValueChangeEvent event){
   // test the new value : if it's ok continue but if it is not ok i need it to keep the old value.
   // I know that the valueChangeListener invoked before the old value is replaced by the newValue, is it ok?, and if ok : what to do to keep the oldValue if the newValue is worng
}

Еще раз спасибо за любую помощь .....

1 Ответ

1 голос
/ 29 апреля 2009

Слушатели изменения значений не могут использоваться для изменения изменяемых значений (к вашему сведению: они вызываются на этапе проверки). Посмотрите на конвертеры и валидаторы - они предотвращают попадание нежелательных данных в вашу модель.

  /** 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, и вам придется включить проверку в логику действия.

...