4

私は現在 Wicket を評価しており、どのように機能するかを理解しようとしています。

フォームの送信とパネル (またはその他のコンポーネント) について質問があります。ajax を使用して入力と同時に検証を行う、テキスト フィールドを含むカスタム ウィケット パネルを想像してみてください。このパネルはフォームに追加されます。パネルはフォーム送信にどのように反応できますか (javascript/ajax が利用できないためとしましょう)?

現在、私が認識している解決策は 1 つだけです。フォームの onSubmit() メソッド内でパネルのメソッドを呼び出すことです。しかし、これはここでは「再利用可能な」アプローチとは思えません。なぜなら、パネルを含むすべてのフォームの onSubmit() にボイラープレート コードを追加する必要があるからです (パネルを使用するすべての開発者はこれを知っている必要があります)。

ここに私の質問があります: パネル/コンポーネントが何らかの方法でフォームの送信を「検出」できる方法はありますか? または、これ以外に解決策はありますか?

ありがとうございました。

4

6 に答える 6

6

パネルに を実装させorg.apache.wicket.markup.html.form.IFormModelUpdateListenerupdateModel()含まれているフォームが送信されて検証に合格したときにメソッドを呼び出す必要があります。

これを使用したコードの良い例が、ウィケットの作成者の 1 人によるWicket In Action ブログにあります。

于 2010-07-13T11:53:50.940 に答える
1

さて、あなたは単に次のことをすることができます:

Panel{
Form{
  onSubmit(){
    Panel.this.onSubmit();
  }
}

protected void onSubmit(){}

}

..。

つまり、パネルを拡張するパネルはonSubmitをオーバーライドするだけでよく、HTMLの内容に関係なく、フォームはそのメソッドを呼び出します。そうすれば、パネルを拡張して、フォームごとに1つのメソッドのみをオーバーライドできます。

于 2010-06-07T23:26:00.887 に答える
0

「反応する」とはどういう意味ですか?私は最近Wicketを使い始めたばかりですが、FWIK、フォーム送信によってコンポーネントのモデルonSubmit()が更新され、それが呼び出されます。これをオーバーライドして、それ以外の特別なアクションを実行できます。WicketinActionの第6章を参照してください。

その後、更新されたモデルを使用してページ(およびそのコンポーネント)が再レンダリングされるため、基本的に、送信時に実際に「反応」し、コード行はかなり少なくなります。

フォーム内のコンポーネントに関する前述のケースについては、をご覧くださいCompoundPropertyModel

于 2010-07-12T00:23:07.443 に答える
0

フォーム コンポーネントに関しては、フレームワークが透過的に処理します。親フォームに直接追加されていない場合でも、フォームは子フォーム コンポーネントを認識します。

于 2010-06-02T16:35:03.620 に答える
0

そのパネル内にフォームがあります。このようにして、外部フォームを必要とせずにそのパネルを再利用できます。HTML ではフォームを互いに入れ子にすることはできないため、Wicket は内側のフォームを に透過的に交換しますが、内側のフォームのそれぞれがフォーム処理 (検証など) の一部になるようにします。

パネルでフォームの OnSubmit() 関数をオーバーライドできます。ウィケットがあなたのためにそれを呼び出します。

于 2010-06-29T08:28:47.510 に答える
0

IFormSubmitListner と IFormModelUpdateListener を実装すると、フォームの送信中にそれぞれのメソッドが呼び出されます。

ただし、フォーム送信後に何らかの処理を行いたい場合は、定型コードを自分で作成するしかありません。

于 2013-07-10T04:05:12.787 に答える