我使用的检票,以建立一个网站上的搜索引擎的用户界面。 当用户正在键入的结果示于下拉。 正如我有很多不同的对象(与每个不同的显示结构)我想要定义多个面板。 因此,对于在DB各个找到的项目,它得到正确的面板和股权结构。 因此,例如:如果找到的搜索引擎用户,它应该只显示名称。 当图片被发现,缩略图和说明等...
现在,我使用的是AutocompleteTextField但是只需要字符串。 我想到了在字符串中添加HTML并显示它这样。 但因为这是不是一个真正的干净的解决方案,我想用面板。
所以,任何人都知道我可以使用,而不是在AutoCompleteTextField弦板?
创建自己的组件。 使用一个ListView,把它变成一个WebMarkupContainer。 显示了基于TextField的输入WebMarkupContainer和刷新连接到文本字段中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;
}
该AutoCompleteTextField
使用newAutoCompleteBehavior
-hookmethod创造行为做选择的显示。 这hookmethod需要一个IAutoCompleteRenderer作为参数。 该渲染器实际上做的显示部分。 所以,你既可以通过自己的渲染到AutoCompleteTextField(有一个构造函数接受一个)或子类AutoCompleteTextField
覆盖工厂方法。 无论哪种方式,你就必须拿出自己实现IAutoCompleteRenderer
因为在检票口没有这样执行和渲染器本身将当前的应用程序设计的严重影响。
我不认为这是可以使用的面板,因为面板是一个组成部分,本身可以是任何东西。 这将是太难支持任何面板自动完成列表的一部分。 这将是有趣的具有自动完成元素作为自动填充字段的表格;)
所以,这就是为什么有IAutoCompleteRenderer
界面允许您生成元素的任何HTML标记,但不作为面板。
作为一个选项,也许有可能有一种使用模式弹出AJAX对话窗口ModalWindow
。