【问题标题】:Using panels instead of String in Autocompletetextfield在 Autocompletetextfield 中使用面板而不是字符串
【发布时间】:2013-03-18 15:28:18
【问题描述】:

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

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

那么,有谁知道我如何使用面板而不是 AutoCompleteTextField 中的字符串?

【问题讨论】:

  • 除了下面的答案之外,根据您要显示的不同事物的数量和性质,您可能希望使用片段而不是面板。

标签: java autocomplete wicket panels


【解决方案1】:

创建您自己的组件。使用 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;
   }

【讨论】:

  • 感谢您的建议。会看看的
  • 列表中可以显示哪些组件?最终我不想只使用标签,因为我很快就会达到极限。我应该从 Component 类扩展并自己制作还是可以使用片段?
  • 您想要的任何面板。我添加了一些代码来展示如何填充 ListView。
【解决方案2】:

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

【讨论】:

  • 是的,谢谢您的回答。我已经想到了这一点,但暗暗希望会有一种更简单的方法:p
  • @Merlijn 最简单的解决方案似乎是 Robert Niestroj 提出的解决方案,因为渲染器必须为 Behavior 提供字符串...
【解决方案3】:

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

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

作为一种选择,也许可以使用ModalWindow 弹出某种模式的 ajax 对话框窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2016-06-19
    • 2021-01-23
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多