Как открыть модальное окно при загрузке страницы в калитке 1.5 - PullRequest
3 голосов
/ 09 ноября 2011

Некоторое время я использовал wicket 1.4.x, и найденное здесь решение работало довольно хорошо: Как открыть ModalDialog на PageLoad Но когда я перешел на калитку 1.5, я просто не знаю, как сделать всплывающее окно модального окна при загрузке страницы.

Кусок кода выглядит так:

private PlainModalWindow tmpPassChange = new PlainModalWindow( "tmp_pass_change" );
tmpPassChange.add( new OpenWindowOnLoadBehavior() );
tmpPassChange.setInitialHeight( 418 );
tmpPassChange.setResizable( false );
tmpPassChange.setMaskType( ModalWindow.MaskType.SEMI_TRANSPARENT );
tmpPassChange.setPageCreator( new ModalWindow.PageCreator()
{
  private static final long serialVersionUID = 1L;

  public Page createPage()
  {
    return new TmpPassChange( u, tmpPassChange );
  }
} );
add( tmpPassChange );

Чтобы объяснить, я проверяю, есть ли у страницы определенный параметр. Когда есть один, я ищу пользователя с этим параметром в базе данных. Когда у меня есть один, я хотел бы открыть PlainModalWindow, это окно класса расширяет обычный ModalWindow со стилем удаления CSS и все. Поведение при загрузке выглядит следующим образом:

public class OpenWindowOnLoadBehavior extends AbstractDefaultAjaxBehavior
{

private static final long serialVersionUID = 1L;

@Override
protected void respond( AjaxRequestTarget target )
{
    ModalWindow window = (ModalWindow) getComponent();
    window.show( target );
}

public void renderHead( IHeaderResponse response )
{
    response.renderOnLoadJavaScript( getCallbackScript().toString() );
}
}

Как я уже говорил выше, это работало в калитке 1.4: (

1 Ответ

3 голосов
/ 11 ноября 2011

Поскольку я не мог найти ответ на этот вопрос, я сделал обходной путь. Может быть, это кому-нибудь поможет. Сначала добавьте ссылку на файл HTML (отобразите: нет, чтобы никто ее не увидел):

<a style="display: none;" wicket:id="openPopup" id="openPopup"/>

Создать AjaxLink:

AjaxLink openPopup = new AjaxLink("openPopup") 
{
    @Override
    public void onClick(AjaxRequestTarget target) 
    {
        tmpPassChange.show( target );
    }
};
add (openPopup);

И в методе renderHead проверьте ваши условия для открытия всплывающего окна:

public void renderHead( IHeaderResponse response )
{
    String jQueryString = "";
    if ( u != null )
    {
        jQueryString += "jQuery('#openPopup').trigger('click');";
    }
    response.renderOnLoadJavaScript( jQueryString );
}

Надеюсь, это кому-нибудь поможет, у меня работает :)

...