先日の table でヘッダを固定してスクロールさせる表示を Wicket のモーダル表示で
やってみます。
HTMLソースの <table> の id 属性で指定したものを、どこで jQuery を実行させるかだけの
ことなのですが、同じ<table> に他に Wicket の behavior が必要だったりする場合は、
WebMarkupContainer scrolltable = new WebMarkupContainer("scrolltable"){
@Override
public String getMarkupId(){
return getId();
}
};
のように、<table wiclet:id="scrolltable"> に対して id 属性値を Wicketの id自動割り振り機構から
守る必要がある。
まず、、
モーダルを表示する WebPage クラスで、renderHead をオーバーライドして、
jquery 宣言の後で jquery.tablefix_1.0.1.js を読むようにします。
@Override
public void renderHead(IHeaderResponse response){
super.renderHead(response);
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(SamplePage.class, "jquery-1.9.1.js")));
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(SamplePage.class, "jquery.tablefix_1.0.1.js")));
}
モーダルの定義、<div wicket:id="modal"></div> が HTMLソースにあるものとします。
final ModalWindow window = new ModalWindow("modal");
window.setTitle("Data picker");
window.setInitialWidth(500);
window.setInitialHeight(400);
window.setCssClassName(ModalWindow.CSS_CLASS_BLUE);
window.setWindowClosedCallback(new ModalWindow.WindowClosedCallback(){
@Override
public void onClose(AjaxRequestTarget target){
// ModalWindow が CLOSE
}
});
add(window);
モーダルの呼び出しは、AjaxEventBehavior で、 "onclick" 等などで表示するものとして、
必ず実装する protected void onEvent(AjaxRequestTarget target) の target を使用してて、
以下のように呼び出す。
window.setContent(new FooDetailModal(window.getContentId()));
window.show(target);
target.appendJavaScript("$('#scrolltable').tablefix({ height: 120, fixRows: 1 });");
table の表示は、FooDetailModal という Wicket の Panel に任せます。
#scrolltable の指定と FooDetailModal.html 内に、
<table id="scrolltable">
が存在するということ。