在Autocompletetextfield中使用面板代替字符串



我正在使用Wicket为网站上的搜索引擎构建一个ui。当用户输入时,结果显示在一个下拉菜单中。因为我有很多不同的对象(每个对象都有不同的显示结构),所以我想定义几个面板。因此,对于在数据库中找到的每个项目,它将获得正确的面板和正确的结构。例如:如果搜索引擎找到一个用户,它应该只显示其姓名。当找到图片,缩略图和描述等…

现在我正在使用AutocompleteTextField,但它只接受字符串。我想在字符串中添加html并像那样显示它。但由于这不是一个真正干净的解决方案,我正在考虑使用面板。

所以,有人知道我如何使用面板而不是字符串在AutoCompleteTextField?

创建自己的组件。使用ListView,把它放到WebMarkupContainer中。显示WebMarkupContainer基于TextField输入和刷新ListView中的OnChangeAjaxBehavior附加到TextField。

这样你就可以完全控制你想要达到的目标。

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;
   }

AutoCompleteTextField使用newAutoCompleteBehavior -hook方法来创建显示选择的行为。这个钩子方法接受一个IAutoCompleteRenderer作为参数。这个渲染器实际上在做显示部分。所以你可以将你自己的渲染器传递给AutoCompleteTextField(有一个构造函数接受一个)或子类AutoCompleteTextField来覆盖工厂方法。无论哪种方式,您都必须提出自己的IAutoCompleteRenderer实现,因为wicket中没有这样的实现,并且渲染器本身将受到当前应用程序设计的严重影响。

我不认为可以使用面板,因为面板是一个组件,它本身可以是任何东西。支持任何面板作为自动完成列表的一部分将是非常困难的。将自动完成元素作为带有自动完成字段的表单;)

将会很有趣

所以,这就是为什么有IAutoCompleteRenderer接口允许您为元素生成任何html标记,但不是作为面板。

作为一个选项,也许有可能有一种模态弹出ajax对话框窗口使用ModalWindow

相关内容

  • 没有找到相关文章