1

改札バージョン6を使用しています。

フォームがあります。フォームのコンテンツとして、 2つのDateTimeFieldorg.apache.wicket.extensions.yui.calendar )を含むFormComponentPanelがあります。

フォームを含むクラスには、1つのAjaxButtonと1つのAjaxLinkがあり、どちらも同じことを実行します。モデルを読み取り、新しいオブジェクトを作成し、処理のためにサーバーに送信します。

とにかく、

  • リンクをクリックすると、datepickerで選択された新しい日付を除いて、新しいオブジェクトが正しい値で作成されます。

  • ボタンをクリックすると、エラーが発生します([AjaxRequestHandler@1701777932 responseObject [org.apache.wicket.ajax.AjaxRequestHandler$1@3e1])が、エラーに関する詳細情報はありません。

さて、ここで提案されているように、ajax更新動作を追加しようとして最初の問題(リンク)に対処しましたが、選択された日付はモデルで更新されません

AjaxButtonが作成され、onSubmitが別のメソッドとtarget.add(form)を呼び出すだけで上書きます。また、setOutputMarkupIdはtrueに設定されていますが、まだ何かが不足しているようです

それを機能させるには、問題の1つを解決する必要がありますが、誰かが両方の問題の解決策を持っていれば素晴らしいと思います。前もって感謝します。

編集

public MyPanelIncludingForm() {
  // ...
  form.add(getRangePanel()); // creates a new TimeRangePanel and returns the instance
  form.add(getSubmitButton());
  // ...
}

private FormComponent<String> getSubmitButton() {
  FormComponent<String> submitBtn = new AjaxButton("submitBtn", form) {
  private static final long serialVersionUID = 3005L;

    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
      System.out.println("submit QT ajax button");
      setResponsePage(HomePage.class);
      sendQuery();
      target.add(form);
    }

    @Override
    protected void onError(AjaxRequestTarget target, Form<?> form) {
      System.err.println("error occurred. " + target);
      target.add(feedback);
    }
  };
  submitBtn.setOutputMarkupId(true);
  return submitBtn;
}

// separate FormComponentModel for timeRange

public class TimeRangePanel extends FormComponentPanel<MyRange> {

MyRange range;
PropertyModel<Date> dpFromPM = new PropertyModel<Date>(this, "range.start");
PropertyModel<Date> dpToPM = new PropertyModel<Date>(this, "range.stop");
public RangePanel(String id, IModel<MyRange> model) {
  super(id, model);

dpFrom = new DateTimeField("dpFrom", dpFromPM) {
  private static final long serialVersionUID = 3006L;

  @Override
  protected DateTextField newDateTextField(String id, PropertyModel<Date> model) {

    DateTextField dtf = super.newDateTextField(id, model);

    AjaxFormComponentUpdatingBehavior a = new AjaxFormComponentUpdatingBehavior("onChange") {
      private static final long serialVersionUID = 3006L;
      @Override
      protected void onUpdate(AjaxRequestTarget target) {
        System.out.println("here u " + dpFrom.getModelObject().toString());
      }
    };
    dtf.add(a);
    return dtf;
  }
};

// second DateTimeField as dpFrom

} // end of constructor

@Override
protected void onBeforeRender() {
  range = getModelObject();
  super.onBeforeRender();
}

} // end of class

edit2

これは、wicketajaxデバッグウィンドウが出力しているものです。

INFO: focus removed from 
INFO: focus set on submitBtn11
INFO: Received ajax response (299 characters)
INFO:
<div wicket:id="feedbackQuery" class="feedback" id="feedbackQuery1c"><wicket:panel>
  <ul wicket:id="feedbackul" class="feedbackPanel">
    <li wicket:id="messages" class="feedbackPanelERROR">
      <span wicket:id="message" class="feedbackPanelERROR"></span>
    </li>
  </ul>
</wicket:panel></div>
INFO: returned focused element: [object HTMLInputElement]
INFO: returned focused element: [object HTMLInputElement]
INFO: Response processed successfully.
INFO: refocus last focused component not needed/allowed
INFO: focus removed from submitBtn11

edit3

私がコメントで書いたように:

再利用可能なコンポーネント(FormComponentPanel)を削除しましたが、AjaxButtonでエラーが発生しなくなりました。とにかく、それは奇妙です。Ajaxでも、再利用可能なコンポーネントが機能するはずだと思いました。また、モデルは適切に割り当てられました。

4

1 に答える 1

1

ボタンをクリックすると、エラーが発生します([AjaxRequestHandler@1701777932 responseObject [org.apache.wicket.ajax.AjaxRequestHandler$1@3e1])が、エラーに関する詳細情報はありません。

=>より詳細なトレースを取得するには、WicketをDEVELOPMENTモードで実行する必要があります。

フォームに次のフィールドを追加するだけです。

range.start

range.stop

オブジェクトMyRangeをプロパティモデルとして使用し、代わりにフィールドごとに新しいモデルを作成します。実際には、その余分なサイクルは必要ありません。また、属性ごとに新しいPropertyModelsを作成した場合、Wicketが情報をMyRangeオブジェクトに書き戻すことはないと思います。

例:http ://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UserForm.java?view = markup276 行目

および対応するHTMLhttp ://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html?view=markup82 行目

セバスチャン

于 2012-10-08T13:03:59.463 に答える