1

私は Wicket を初めて使用するので、これが単純な作業である場合はご容赦ください。例を探してみましたが、空っぽでした。

これがシナリオです。25 のデータ ポイント (名前、生年月日、住所、電話番号など) を含む顧客情報パネルがあるとします。このパネルをサイトのさまざまなページで再利用したいと考えています。ここで、パネルが表示される 3 つの異なるページに次の基準があるとします。

  • ページ 1 - すべてのフィールドが表示および編集可能
  • ページ 2 - 生年月日、性別、顧客名は表示されますが編集できません。他のすべてのフィールドは表示および編集可能です。
  • ページ 3 - 生年月日と性別は表示されません。住所は表示されて編集可能です。他のすべてのフィールドは表示されますが編集できません。

(コードの重複を減らすために) 同じパネルを使用する方法はありますが、パネルがロードされている現在のページに基づいてそのコンポーネントを制御しますか?

助けてくれてありがとう!

4

3 に答える 3

6

このように可視性と編集可能性を暗黙的に変更しないことをお勧めします。代わりに、コンポーネントのコンストラクター引数またはカスタム コンポーネントの追加メソッドに基づいて明示的にすることを検討してください。

于 2012-06-25T20:27:02.443 に答える
1

パネル内でメソッドを呼び出すことができますgetPage()。ページが特定のクラスのインスタンスであるかどうかを確認するか、を呼び出すことでページクラスを取得できますgetPageClass()

パネル内のコンポーネントの可視性は、メソッドを呼び出すsetVisible()か、メソッドをオーバーライドすることで設定できますisVisible()。コンポーネントを編集可能にする必要があるかどうかは、isEnabled()メソッドを使用して(またはオーバーライドしてsetEnabled())制御できます。

class YourPanel extends Panel {
    public YourPanel() {
        add(new TextField("name") {
                @Override
                boolean isVisible() {
                    return getPage().getPageClass().equals(Page2.class);
                }
        }
        TextField genderTextField = new TextField("gender");
        genderTextField.setVisible(!getPage().getPageClass().equals(Page3.class));
        add(genderTextField);
    }
}

ご覧のとおり、多くのコンポーネントと多くの場合、コードをチェックするのは非常に複雑です。カスタムパネルを作成し、可視性と編集可能性のルールに従ってコンポーネントを追加し、パネルが表示または編集可能である場合はパネル全体を制御すると、よりクリーンなコードを取得できる可能性があります。

于 2012-06-25T20:17:58.140 に答える
0

他の回答によるsetVisible()と、呼び出しなどで外観をカスタマイズできます。

ただし、パネルを表示ページに結合することはお勧めしません。これにより循環依存が発生し、新しいタイプのページでパネルを再利用するたびに、新しいページの別のチェックを追加する必要があります。代わりに、パネルを設定可能にするだけです (構築時に などのパラメータを渡してこれを行うのが最善ですboolean addressVisible)。

于 2012-06-25T20:26:58.813 に答える