マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

ModalWindowを使ってみる

wicket-extensionsにModalWindowというクラスがあったので使ってみた。ModalWindow#setPageCreatorでModalWindow.PageCreatorを実装したクラスのオブジェクトを渡さないと表示させるときに例外が発生する。ModalWindow#showでAjaxRequestTargetを渡す必要があるので、いきなり表示させるのは無理っぽい?以下ソース


ModalWindowを表示させるページのHTML、ファイル名はModalWindowTest.html

<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div wicket:id="modal"></div>
    <form wicket:id="form">
        <input type="button" value="表示" wicket:id="button"/>
    </form>
  </body>
</html>

ModalWindowを表示させるページのクラス、ファイル名はModalWindowTst.java

package modal;

import org.apache.wicket.Page;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;

public class ModalWindowTest extends WebPage{
    public ModalWindowTest(){
        final ModalWindow window = new ModalWindow("modal");
        window.setTitle("Modal Window");
        window.setPageCreator(new ModalWindow.PageCreator(){
            public Page createPage(){
                return new ModalWindowPage();
            }
        });

        Form form = new Form("form");

        AjaxButton button = new AjaxButton("button"){
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form form){
                window.show(target);
            }
        };

        add(window);
        form.add(button);
        add(form);
    }
}

ModalWindowに表示させるページのHTML、ファイル名はModalWindowPage.html

<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      ModalWindowのコンテンツ
  </body>
</html>

ModalWindowに表示させるページのクラス、ファイル名はModalWindowPage.java

package modal;

import org.apache.wicket.markup.html.WebPage;

public class ModalWindowPage extends WebPage{

}

アプリケーションクラス、ファイル名はModalWindowTestApplication.java

package modal;

import org.apache.wicket.protocol.http.WebApplication;

public class ModalWindowTestApplication extends WebApplication{
    @Override
    public Class<ModalWindowTest> getHomePage(){
        return ModalWindowTest.class;
    }

    @Override
    public void init(){
        getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
        getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
    }
}

最後にフィルタマッピング

<filter>
    <filter-name>modal</filter-name>
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
    <init-param>
        <param-name>applicationClassName</param-name>
        <param-value>modal.ModalWindowTestApplication</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>modal</filter-name>
    <url-pattern>/modal/*</url-pattern>
</filter-mapping>