WicketでHTMLを別のディレクトリに配置する
前回の続き。
Wicket-jaのメーリングリストで最近話題になった内容。
WicketはデフォルトではPageクラスに対応するHTMLファイルはPageクラスと同じ階層にある必要がある。というかPageクラスと同じ階層を検索するようになっている。
特に問題はないけど、一般的にはWEB-INFの下に置いてあるのが普通だし、今回はHTML部分は自称デザイナーOが作ることになっているので、javaのパッケージ内をいじられるのはあまり好ましくない。というか彼も.javaやらのファイルがあるところで作業するのは嫌だろうと思う。
なのでHTMLファイルはWEB-INF以下に配置しようと思う。
まずはViewFileLocatorを作成する。
ViewFileLocator.java
public class ViewFileLocator extends ResourceStreamLocator{ private String pagesPath; public ViewFileLocator(String pagesPath){ this.pagesPath = pagesPath; } @Override public IResourceStream locate( Class<?> clazz, String path ){ if( path.indexOf( pagesPath, 0 ) != -1 ){ IResourceStream located = super.locate( clazz, path.substring(pagesPath.length() + 1)); if( located != null ){ return located; } } return super.locate( clazz, path ); } }
つぎにApplicationクラスのinitメソッド内に以下を追加
MyApplication.java
IResourceSettings resourceSettings = getResourceSettings(); resourceSettings.addResourceFolder( "WEB-INF/pages" ); resourceSettings.setResourceStreamLocator( new ViewFileLocator("taka/of/master/pages" ) );
以上で完了。
すると
taka.of.master.pages.HomePage.java
に対応するHTMLファイルは
WEB-INF/pages/HomePage.html
が使用される。
taka.of.master.pages.user.UserPage.java
は
WEB-INF/pages/user/UserPage.html
が使用される。
階層は保つ必要がありそうだけど、これでjavaソースフォルダ内からHTMLファイルがなくなった。
メーリングリスト、参考になりました。
以上。