2011-10-18 9 views
2

私はオブジェクトを追加または編集するために再利用できるフォームを実装しようとしています。 Formを拡張するクラスを定義すると、このフォームのインスタンスを作成しているページのHTML内のすべてのフォームコンポーネントのマークアップを宣言する必要があることに気付きました。改札にカスタムフォームのマークアップを含めることはできますか?

カスタムフォームクラスを持つ対応するHTMLファイルをパッケージに配置しようとしましたが、HTMLがJavaクラスに含まれているという事実はありません。

基本的に私はフォームを正確に同じに見せたいだけですが、フォームのonSubmitメソッドをオーバーライドできるように、フォームのsetResponsePageを呼び出すときに異なる値を使用できます。

答えて

6

ウィケットのFormは、他の多くのウィケットコンポーネントクラスが行う対応するマークアップと同じパターンをサポートしていません。

私はこのような何かをしたい場合は、私は、Panelサブクラスでフォームをラップし、そのクラスのために、対応するマークアップでフォームのマークアップを入れ、その後、マークアップを複製することなく、複数のページでパネルを含めることができます。

同じマークアップを持つ複数のフォームがある場合は、そのフォーム自体をパラメータとしてパネルに渡すか、パネルコード内にロジックを使用してどちらのバリアントを使用するかを決定することもできます。

特定の目的の別の可能性は、フォームの作成時に応答ページをパラメータとして渡すことです。それが唯一の違いなら、2つのフォームを作成する必要はありません。

+0

+1これは良いアドバイスです。おそらく私が変えるのは最後の提案だけです。パネルが提出時に何をすべきか(または回答ページを見つける方法)を決定し、パネルを使用するコンポーネントがそれを上書きするようにする方が簡単/軽いかもしれません。 –

+0

@ Xavi - 実際、フォームがパネルの内部クラスであれば、これは非常に簡単です。 –

2

だけ@DonRoby 's fine commentsに追加し、あなたはそれをこのように見ることができます:

  • あなただけなPanelBorderFragmentとして、Page、またはWebMarkupContainerWithAssociatedMarkupを拡張するそれらのクラスのためのマークアップを提供することができます。例えばTextField、またはそれらのマークアップだけ出力Formとして
  • 他のクラスは、おそらくそれらのonComponentTag()onComponentTagBody()方法等を介して、インスタンスの状態に基づきます。 TextField<input ...>Formの出力は<form ....> _formbody_ </form>です。

ドンは、すでに指摘したように、移動するための方法はPanel内のこのFormを埋め込むことです。いつでも、PanelのラップでForm.onSubmit()をカスタムメソッドに委譲し、必要に応じてオーバーライドすることができます。

関連する問題