0

私は2つの入力を持っています。ボタン (AjaxFallbackButton) を押すと、それらの入力がデータベースに保存されます。

入力の 1 つが 10 より大きい場合、ボタンを押したときにモーダル パネルを表示して、オプションについて確信があるかどうかをユーザーに尋ねます。しかし、モーダル コンポーネントは表示されません。何かご意見は?

 @Override
     public void onSubmit(AjaxRequestTarget target) {

  if (input < 10) { //save to database
} else {
         AskingDialogPanel panel = new AskingDialogPanel("content",
       new ResourceModel("asking.title"),
       new ResourceModel("asking.message")) {
      @Override
      public void onOkClick(AjaxRequestTarget target) {
       super.onOkClick(target);

                                                    //save to database
       modalWindow.close(target);
      }

      @Override
      public void onCancelClick(AjaxRequestTarget target) {

       super.onCancelClick(target);
       modalWindow.close(target);
      }
     };
                                    panel.setOutputMarkupId(true);
                target.addComponent(panel);
                modalWindow.setContent(panel);
                modalWindow.show(target);
}
4

1 に答える 1

0

AjaxRequestTargetのドキュメントをご覧ください。

マークアップを更新する必要があるコンポーネントは、AjaxRequestTarget#addComponent(Component) メソッドを介してこのターゲットに追加する必要があります。その本体は、ターゲットが処理されるときにレンダリングされてエンベロープに追加され、ajax 応答が受信されるとクライアント側で更新されます。

これを正しく覚えているかどうかはわかりませんが (以前は正しい更新動作を実装するのに問題がありました)、addComponent以前にページに追加されたコンポーネントのみをレンダリング/非表示にすることができたと思います。これらは更新され、可視性が再評価されます。

ただし、間違っている可能性があります.AskingDialogPanelを通常のラベルに置き換えた場合、上記は機能しますか? (私が間違った結末を話していることを確認するためだけに;))

于 2010-02-05T20:03:39.507 に答える