Java Wicket AutoCompleteTextField(两种类型)在ModalWindows中都有bug

Java 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>

Wicket中有两个版本的AutoCompleteTextField,一个在Wicket extensions中,另一个在com.googlecode.Wicket中。我试图在Wicket ModalWindow中使用其中一个,但两者都有问题

这两个版本通常都可以在网页上使用,而不使用模式窗口,但我需要在其中一个窗口中使用它们。有一些有限的例子,但没有具体的模态对话框

Wicket扩展版本: 使用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 );
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[]中有一个版本依赖于表单提交,但如果在此之前需要表单提交,则这是不好的
谷歌版本: 使用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 );
  }
};
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扩展示例: 谷歌的例子:


提前感谢。

更新到最新的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>