質問

HY、特定の条件の下でのみ、ウィケットテンプレートの特定の部分(たとえばDiv)を表示したい(たとえば、それを入力するデータがある場合のみ)。問題は:

データを取得した場合にパネルを追加する(div を埋める)だけの場合、データなしでページを呼び出すたびに例外がスローされます(参照される wicket-id がコンポーネント ツリーに追加されないため)。

私の頭に浮かんだ唯一の解決策は、データがない場合に空のパネルを追加することでした。Java コードに不要なコードが含まれ、レンダリングされた HTML に空の div が多数含まれているため、これは理想的な解決策ではありません。

それでは、条件下でのみウィケットテンプレートのいくつかの部分を含めるより良い解決策はあるのでしょうか?

役に立ちましたか?

解決

これは古い質問ですが、もう 1 つの解決策が考えられます。 ウィケット:エンクロージャ (そして これ )

アップデート:今、私はこの機能を自分で必要としていました( ジェットウィック)。WebMarkupContainer を loggedIn 状態用と loggedOut 状態用に 1 つずつ使用し、適切な可視性を設定しています。

if (loggedIn()) {            
   WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
   //## do something with the user
   User user = getUserSomeWhere();
   loggedInContainer.add(new UserSearchLink("userSearchLink"));
   add(loggedInContainer);
   add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
   add(new WebMarkupContainer("loggedIn").setVisible(false));
   WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
   loggedOutContainer.add(new LoginLink() {...});
   add(loggedOutContainer);
}

私にとってこれの利点は、//## でマークされた行で NullpointerExc が発生するのを防ぐことと、この場合 wicket の囲み機能がより醜く見えることです。

他のヒント

@miaubizが言ったように、可視性が他の状態(フィールドが入力されているなど)に対して条件付きである場合は、setVisible(false)を呼び出すか、isVisible()メソッドをオーバーライドできます。

はい、isVisible をオーバーライドしたいとします。これにより、isVisible=false HTML マークアップが最終的な HTML ページにレンダリングされなくなります。また、ドキュメントによると(で言及されています) 空のパネル)、を使用できます。 WebMarkupコンテナ ラッピングコンポーネントとして。

    this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return myList.isEmpty(); } 
    });

    final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return !myList.isEmpty(); } 
    };

これが原因だと思います 空のパネル. 。あなたのコードについて詳しく知りませんが、私があなたがやっていると思うことは、私が何かの子を組み合わせて行うことだとしか言えません。 抽象リピーター そして 断片. 。やりたいことについて詳しく教えていただき、コードも提供していただければ、できる限りお手伝いさせていただきます。

setVisible(false) を呼び出すことができます。非表示にしたいコンポーネント上で。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top