2011-12-07 5 views
0

まだウィケットモデルを取得していません。私はここで間違って何をしていますか? filterStringは、リンクonClickメソッドがそれを出力してもまだ ""です。ウィケット弦モデル

class X extends Panel { 
    String filterString; 
    TextField filterTextField; 
    AjaxLink filterLink; 

    X(){ 
     filterString = new String(""); 
     filterTextField = new TextField<String>("filterTextField", new PropertyModel<String>(this, "filterString")); 
     filterLink = new AjaxLink<Void>("filterLink"){ 
      private static final long serialVersionUID = 1L; 
      @Override 
      public void onClick(AjaxRequestTarget target) {    
       params.setFilterString(filterTextField.getModelObject()); 
       System.out.println("BLABLABLA " + filterTextField.getModelObject()); 
      } 
     }; 
     //add stuff etc 
    } 
} 

EDIT:

OK、ユハは、フォームの作品を使用して言ったように。時には、私は、フォームを作成することが過度のように感じるように感じるが、これはおそらく最も重要なWicket-yのことなので、ここで使用するものである。クラスは、このようなものになります。コンストラクタで

public class X extends Panel { 
    private static final long serialVersionUID = 1L; 
    public X(String id) { 
     super(id); 
     add(new FilterForm("logEntryForm")); 
    } 

    public class FilterForm extends Form{ 
     private static final long serialVersionUID = 1L; 
     private transient String text; //no need to serialize this 
     public FilterForm(String id) { 
      super(id); 
      final TextField<String> contents = new TextField<String>("contents", new PropertyModel<String>(FilterForm.this, "text")); //textArea for user to enter the filter String 
      add(contents); 
      add(new AjaxButton("filterButton") { 
       private static final long serialVersionUID = 1L; 
       @Override 
       protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
        //do stuff, in my case it was to send the text to the database for filtering out results 
       } 
      }); 
     } 
    } 
} 
+0

フォームを追加することはWicketとは関係ありませんが、Webの仕組みとは全く関係がありません。フォームがない限り、ブラウザはサーバーに値を送信しません。*または* Ajaxを使用してコンポーネントの値。それはウェブであり、それと共に生きています。 –

答えて

2

FormAjaxButtonまたはonSubmit()方法を持っているものとAjaxLinkを交換してください。 AjaxLinkは送信しませんので、ブラウザは入力値をサーバーに送信しません。

+0

したがって、onClickメソッドはユーザーから値を取得することはありませんか?私には奇妙に思われます。 – fred

+1

あなたは、Textfieldにその値(モデルではありません)を直接問い合わせるか、それを使って作業します。またはあなたはJuhaを聞くことができます。フォームを作成し、送信コンポーネントを使用します。 – bert

+0

どのような方法で値を取得しますか? getInput()または..? – fred

0

あなたがx()はなくX()(資本Xを)書かれているようだが

+0

クラス名とそのコンストラクタは重要ではありません。その例です。問題はモデルの使用です。あなたの頭のためにタイポに感謝。 – fred

+0

@fredしかし、質問を出しながら構文的に正しいコードを提供しようとします。それ自体が誤りだったので。 – gprathour