4

テキストエリアの onkeyup でラベルのテキストを変更するにはどうすればよいですか? 私はこれを試しましたが、うまくいきません:

Form form;
TextArea ta;
MyLabel resultDiv;


  /**
   * Constructor that is invoked when page is invoked without a session.
   */
  public HomePage(final PageParameters parameters) {

      this.form = new Form("form");
      this.ta = new TextArea("text");
      this.resultDiv = new MyLabel("result");

      this.ta.add( new AjaxEventBehavior( "onKeyUp" ) {
        protected void onEvent( AjaxRequestTarget target ) {
          System.out.println( "Ajax!" );
          resultDiv.setText("Foobar");
          resultDiv.renderComponent();
        }
      } );


      form.add( ta );
      form.add( resultDiv );
      add( form );

  }// const

  public class MyLabel extends Label {
    private String text = "original";
    public String getText() {      return text;    }
    public void setText( String text ) {      this.text = text;    }
    public MyLabel( String id ) {
      super( id );
      this.setModel( new PropertyModel(this,"text") );
    }
  }

解決

leonidvはほとんどそこにありました。結果のコードは次のとおりです。

Form form;
TextArea ta;
Label resultDiv = new Label( "result", new PropertyModel(this,"labelText") ){
  { setOutputMarkupId( true ); }
};

private String labelText = "original";


/**
 * Constructor that is invoked when page is invoked without a session.
 */
public HomePage(final PageParameters parameters) {

    this.form = new Form("form");

    this.ta = new TextArea("text");
    this.ta.add( new AjaxEventBehavior( "onKeyUp" ) {
      protected void onEvent( AjaxRequestTarget target ) {
        System.out.println( "Ajax!" );
        labelText = "Foobar";  // Doesn't even need get/set, which is great.
        target.addComponent( resultDiv );
        //resultDiv.renderComponent(); // WRONG!!
      }
    } );

    form.add( ta );
    form.add( resultDiv );
    add( form );

}// const

最後の問題は、追加に関する私の悪い直感renderComponent()でした。何らかの理由で、ラベルが変更されていませんでした。

ちなみに、結果はすぐにJTexy 軽量マークアップ言語サンドボックスとして機能します。

手伝ってくれてありがとう!

4

2 に答える 2

4

AJAXイベントの後にコンポーネントを更新する場合は、次の2つのことを行う必要があります。

  1. 更新可能なコンポーネントにはフラグが設定されている必要がありますsetOutputMarkupId == true;
  2. このコンポーネントをターゲットのonEventメソッドに追加する必要があります

    this.resultDiv.setMarkupOutputId(true);
    
    protected void onEvent( AjaxRequestTarget target ) {
          System.out.println( "Ajax!" );
          //resultDiv.setModel(  );
          resultDiv.setText("Foobar");
          resultDiv.renderComponent();
          target.add(resultDiv);
    }
    

PS私はあなたのコードの多くの部分を理解していません。

于 2010-01-22T14:28:34.983 に答える
0

resultDiv.renderComponent(); の代わりに resultDiv.modelChanged(); を試してください。

于 2010-01-22T13:01:59.550 に答える