1

Wicketを使用して、Webサイトの検索エンジンのUIを構築しています。ユーザーが入力している間、結果はドロップダウンに表示されます。さまざまなオブジェクト(それぞれ異なる表示構造)があるので、いくつかのパネルを定義したいと思います。したがって、データベースで見つかったアイテムごとに、適切なパネルと適切な構造が取得されます。たとえば、検索エンジンがユーザーを見つけた場合は、名前のみを表示する必要があります。写真が見つかったら、サムネイルや説明など...

現在、AutocompleteTextFieldを使用していますが、文字列のみを使用します。文字列にhtmlを追加して、そのように表示することを考えました。しかし、それは本当にクリーンな解決策ではないので、私はパネルを使用することを考えています。

だから、AutoCompleteTextFieldの文字列の代わりにパネルを使用する方法を知っている人はいますか?

4

3 に答える 3

3

独自のコンポーネントを作成します。ListView を使用して、WebMarkupContainer に入れます。TextField 入力に基づいて WebMarkupContainer を表示し、TextField に添付された OnChangeAjaxBehavior で ListView を更新します。

このようにして、達成したいことを完全に制御できます。

ListView のコード例:

   private ListView getLv(){
      ListView lv = new ListView(PANEL, new PropertyModel(this, "someList")) {
         @Override
         protected void populateItem(ListItem item) {
            Integer type = item.getModelObject().getType();
            if (type == 1) {
               item.add(new PanelType1("panel", item.getModelObject().someIdMaybe));
            } else if (type == 2) {
               item.add(new PanelType2("panel", item.getModelObject().someIdMaybe));
            }
         }
      };
      return lv;
   }
于 2013-03-18T18:38:39.477 に答える
3

は-hookmethod を使用して、選択肢を表示する動作を作成しますAutoCompleteTextFieldnewAutoCompleteBehaviorこのフックメソッドは、引数として IAutoCompleteRenderer を取ります。このレンダラーは実際に表示部分を行っています。したがって、独自のレンダラーを AutoCompleteTextField (レンダラーを受け入れるコンストラクターがあります) に渡すか、サブクラス化しAutoCompleteTextFieldてファクトリ メソッドをオーバーライドすることができます。IAutoCompleteRendererいずれにせよ、ウィケットにはそのような実装がなく、レンダラー自体は現在のアプリケーション設計に大きく影響されるため、独自の実装を考え出す必要があります。

于 2013-03-18T16:23:46.710 に答える
1

パネルはコンポーネントであり、それ自体は何でもかまいません。オートコンプリート リストの一部としてパネルをサポートするのは非常に困難です。オートコンプリート フィールドを持つフォームとしてオートコンプリート要素があると楽しいでしょう;)

そのIAutoCompleteRendererため、要素の HTML マークアップを生成できるようにするインターフェイスがありますが、パネルとしては生成できません。

オプションとして、を使用して一種のモーダル ポップアップ ajax ダイアログ ウィンドウを表示することが可能かもしれませんModalWindow

于 2013-03-18T16:32:41.307 に答える