Java Wicket AutoCompleteTextField(两种类型)在ModalWindows中都有bug
Wicket中有两个版本的AutoCompleteTextField,一个在Wicket extensions中,另一个在com.googlecode.Wicket中。我试图在Wicket ModalWindow中使用其中一个,但两者都有问题 这两个版本通常都可以在网页上使用,而不使用模式窗口,但我需要在其中一个窗口中使用它们。有一些有限的例子,但没有具体的模态对话框 Wicket扩展版本: 使用Wicket 6.11.0Java Wicket AutoCompleteTextField(两种类型)在ModalWindows中都有bug,java,wicket,wicket-6,Java,Wicket,Wicket 6,Wicket中有两个版本的AutoCompleteTextField,一个在Wicket extensions中,另一个在com.googlecode.Wicket中。我试图在Wicket ModalWindow中使用其中一个,但两者都有问题 这两个版本通常都可以在网页上使用,而不使用模式窗口,但我需要在其中一个窗口中使用它们。有一些有限的例子,但没有具体的模态对话框 Wicket扩展版本: 使用Wicket 6.11.0 final AutoCompleteTextField<T>
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 );
final AutoCompleteTextField=new AutoCompleteTextField(“组件”,getSelectionModel(),类,new autocompletestettings()){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的迭代器getChoices(字符串输入){
返回AutoCompleteSelect.this.getChoices(input.iterator();
}
};
field.setOutputMarkupPlaceholderTag(true);
添加(新的AjaxFormComponentUpdateingBehavior(“更改”){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
System.out.println(“选中项!”+getSelectionModel().getObject());
//这是从来没有被称为!
}
} );
添加(字段);
最初,我在让它工作时遇到了一些问题,直到我意识到只有按下向下键它才能获取选项。如果我把一个放在一个ModalWindow中,它的弹出位置会出错,建议会出现在屏幕的右下角。将对话框移动到屏幕右下角会加剧问题
问题:
- 如何让弹出窗口在某人键入文本字段时显示,而不是在他们按下向下键时显示
- 获取ajax onSelected样式调用的最佳方法是什么(如google版本中的调用?)wicket examples[]中有一个版本依赖于表单提交,但如果在此之前需要表单提交,则这是不好的
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 );
}
};
ITextRenderer=newitextrenderer(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共字符串getText(T对象){
返回对象==null?”:object.toString();
}
@凌驾
公共字符串getText(T对象,字符串表达式){
返回对象==null?”:表达式+“+object.toString();
}
};
final AutoCompleteTextField=新的AutoCompleteTextField(“组件”,getSelectionModel(),渲染器,m_类){
私有静态最终长serialVersionUID=1L;
已选择受保护的void(AjaxRequestTarget目标){
System.out.println(“已选择项”+getSelectionModel().getObject()+);
}
@凌驾
受保护列表getChoices(字符串输入){
返回AutoCompleteSelect.this.getChoices(输入);
}
};
虽然这样做最初效果更好(onSelected很有用,弹出窗口显示在正确的位置),但将其放置在模式对话框中会使弹出窗口显示在对话框下方。这可以通过CSS更改z索引来解决(虽然有点混乱,但效果不错),但似乎会触发一个事件,每当您将鼠标悬停在弹出窗口上时,它会隐藏弹出窗口,这意味着无法选择任何内容
- 有人设法阻止弹出窗口消失吗
- 有没有更好的方法来处理z指数问题
提前感谢。更新到最新的Wicket 6.19.0,看看问题是否消失。自6.11.0以来,在自动完成字段和模式窗口方面出现了一些错误:
也许他们可以在不需要任何黑客攻击的情况下解决您的问题。对于Wicket jQuery UI one,这是经过设计的,应该由用户直接处理
.ui自动完成{
z指数:9999!重要;
}
如果这并不能解决您的问题,请在专门的论坛上附上一个演示问题的快速入门
致以最诚挚的问候,Sebastien您好,wicket extensions版本仍然会导致与6.19中相同的问题。呸。我可能不得不自己动手。嗨,塞巴斯蒂安,我已经升级到6.19了,它有点更好(我可以使用上面的css使它出现在对话框上),但是onSelected方法现在不见了,它似乎很难被键入字符串以外的任何内容。如果我尝试将它与自定义对象类型一起使用,它只会将对象的toString存储在基础模型中。(我正在尝试创建一个JIRA样式的自动完成选择字段)您是否已将类型传递给构造函数?
<wicket:head>
<style type="text/css">
.ui-autocomplete {
z-index: 9999 !important;
}
</style>
</wicket:head>