在Wicket中有2个版本的AutoCompleteTextField,一个在wicket-extensions中,另一个在com.googlecode.wicket中。我试图在Wicket ModalWindow中使用其中一个,但我遇到了两个问题。
在不使用模态窗口的情况下,两个版本在网页上通常都可以,但我需要它们。有一些有限的例子,但没有特定的模态对话。
使用Wicket 6.11.0
final AutoCompleteTextField<T> field = new AutoCompleteTextField<T>( "component", getSelectionModel(), theclass, new AutoCompleteSettings() ) {
private static final long serialVersionUID = 1L;
@Override
protected Iterator<T> getChoices( String input ) {
return AutoCompleteSelect.this.getChoices( input ).iterator();
}
};
field.setOutputMarkupPlaceholderTag( true );
field.add( new AjaxFormComponentUpdatingBehavior( "change" ) {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate( AjaxRequestTarget target ) {
System.out.println( "Item selected! " + getSelectionModel().getObject() );
// This is never called!
}
} );
add( field );
最初,我一直遇到问题,直到我意识到在按下向下键之前它没有取得选择。如果我在ModalWindow中添加一个,它的弹出位置会被搞砸,建议会显示在屏幕的右下方。将对话框移动到屏幕的右下角会突出问题。
问题:
使用com.googlecode.wicket-jquery-ui版本6.11.0
ITextRenderer<T> renderer = new ITextRenderer<T>() {
private static final long serialVersionUID = 1L;
@Override
public String getText( T object ) {
return object == null ? "" : object.toString();
}
@Override
public String getText( T object, String expression ) {
return object == null ? "" : expression + "." + object.toString();
}
};
final AutoCompleteTextField<T> field = new AutoCompleteTextField<T>( "component", getSelectionModel(), renderer, m_class ) {
private static final long serialVersionUID = 1L;
protected void onSelected( AjaxRequestTarget target ) {
System.out.println( "Item " + getSelectionModel().getObject() + " has been selected" );
}
@Override
protected List<T> getChoices( String input ) {
return AutoCompleteSelect.this.getChoices( input );
}
};
虽然这最初效果更好(onSelected很有用并且弹出窗口显示在正确的位置)但是将它放在模态对话框中会使弹出窗口显示在对话框下方。这可以通过改变z-index到CSS来修复(有点乱,但有效),但似乎有一个事件被触发,当你将鼠标悬停在它上面时隐藏弹出窗口意味着什么都不能被选中。
Wicket扩展示例:http://www.wicket-library.com/wicket-examples/ajax/autocomplete?0 Google示例:http://www.7thweb.net/wicket-jquery-ui/autocomplete/ConverterAutoCompletePage?0
提前致谢。
答案 0 :(得分:0)
更新到最新的Wicket 6.19.0并查看问题是否消失。从6.11.0开始,有一些关于自动填充字段和模态窗口被解决的错误:
也许他们会在不需要任何黑客攻击的情况下解决您的问题。
答案 1 :(得分:0)
对于Wicket jQuery UI,这是设计使用,应由用户直接处理
<wicket:head>
<style type="text/css">
.ui-autocomplete {
z-index: 9999 !important;
}
</style>
</wicket:head>
如果这不能解决您的问题,请随时附上在专用论坛中演示此问题的快速入门...
最好的问候,
的Sebastien