在ModalWindows

时间:2015-06-15 12:03:25

标签: java wicket wicket-6

在Wicket中有2个版本的AutoCompleteTextField,一个在wicket-extensions中,另一个在com.googlecode.wicket中。我试图在Wicket ModalWindow中使用其中一个,但我遇到了两个问题。

在不使用模态窗口的情况下,两个版本在网页上通常都可以,但我需要它们。有一些有限的例子,但没有特定的模态对话。

Wicket Extension版本:

使用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中添加一个,它的弹出位置会被搞砸,建议会显示在屏幕的右下方。将对话框移动到屏幕的右下角会突出问题。

问题:

  • 如何让弹出窗口显示为有人在文本字段中输入,而不是当他们按下向下键时?
  • 获取ajax onSelected式调用的最佳方法是什么(比如google版本中的那个?)wicket示例中有一个版本[1]依赖于表单提交,但这是如果你在此之前需要它就没有好处。

Google版本:

使用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来修复(有点乱,但有效),但似乎有一个事件被触发,当你将鼠标悬停在它上面时隐藏弹出窗口意味着什么都不能被选中。

  • 有没有人设法阻止弹出消失?
  • 有没有更好的方法来处理z-index问题?

Wicket扩展示例:http://www.wicket-library.com/wicket-examples/ajax/autocomplete?0 Google示例:http://www.7thweb.net/wicket-jquery-ui/autocomplete/ConverterAutoCompletePage?0

提前致谢。

2 个答案:

答案 0 :(得分:0)

更新到最新的Wicket 6.19.0并查看问题是否消失。从6.11.0开始,有一些关于自动填充字段和模态窗口被解决的错误:

也许他们会在不需要任何黑客攻击的情况下解决您的问题。

答案 1 :(得分:0)

对于Wicket jQuery UI,这是设计使用,应由用户直接处理

https://groups.google.com/forum/#!searchin/wicket-jquery-ui/autocomplete/wicket-jquery-ui/bwSVY4mlrac/q-dRK1EUr6cJ

<wicket:head>
    <style type="text/css">
        .ui-autocomplete {
            z-index: 9999 !important;
        }
    </style>
</wicket:head>

如果这不能解决您的问题,请随时附上在专用论坛中演示此问题的快速入门...

最好的问候,
的Sebastien