0

私はicefaces 1.7.1を使用し、そのようなvalueChangeListenerでice:inputTextを使用します:

<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
}

助けてくれてありがとう.....

4

1 に答える 1

1

値変更リスナーを使用して、変更される値を変更することはできません (FYI: 検証フェーズで呼び出されます)。コンバーターバリデーターを見てみましょう- これらはジャンク データがモデルに入るのを防ぎます。

  /** 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);
    }
  }

多くの人をつまずかせる領域の 1 つは、送信されたフォームに無効なデータが含まれていると、アクションの実行が妨げられることです。これは仕様によるもので、ビジネス ロジックが不正なデータで動作するのを防ぎます。リクエストに無効なデータが含まれていてもアクションを起動する必要がある場合は、JSF 検証モデルを使用できず、検証をアクション ロジックに組み込む必要があります。

于 2009-04-29T13:49:42.147 に答える