Wicketでhtmlファイルの場所を変更する方法
Wicketには、同じパッケージディレクトリにあるHTMLファイルとJavaファイルが必要です。 ここでは、javaファイルとhtmlファイルを別のディレクトリに配置する方法を示します。
例えば、
-
Index.java located at Project /src/main/java/com/example
-
Index.Html located at Project /src/main/webapp/pages , root context “/” at “/src/main/webapp”.
Wicket in Actionによると
Wicketのデフォルトのリソース検索方法により、開発中にJavaファイルとマークアップファイルがすぐ隣にあるため、それらをすばやく切り替えることができます。 また、このアルゴリズムを使用すると、ユーザーがテンプレートのロード元を構成する必要なく、パッケージコンポーネントをすぐに再利用できます。コンポーネントのクラスがクラスパスで見つかった場合、そのリソースも見つかります。 これは強力なデフォルトであり、カスタムを実装する前によく考えてください。
Wicket 1.3
それでもリソースパスをカスタマイズする場合は、ここでWicket 1.3でそれを行う2つの方法を提供します。
1. Webコンテキストでリソースを見つける
ResourceStreamLocatorクラスを拡張するクラスを作成し、次の関数をオーバーライドします
-
Locate(クラスクラッツ、ストリングパス)
package com.example; import java.net.MalformedURLException; import java.net.URL; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.UrlResourceStream; import org.apache.wicket.util.resource.locator.ResourceStreamLocator; import org.apache.wicket.util.string.Strings; public class MyOwnStreamLocator extends ResourceStreamLocator { @Override public IResourceStream locate(Class> clazz, String path) { String location; String extension = path.substring(path.lastIndexOf('.') + 1); String simpleFileName = Strings.lastPathComponent(clazz.getName(), '.'); location = "/pages/" + simpleFileName + "." + extension; URL url; try { // try to load the resource from the web context url = WebApplication.get().getServletContext().getResource(location); if (url != null) { return new UrlResourceStream(url); } } catch (MalformedURLException e) { throw new WicketRuntimeException(e); } // resource not found; fall back on class loading return super.locate(clazz, path); } }
Wicket Applicationクラス
package com.example; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.file.WebApplicationPath; public class MyApplication extends WebApplication { public ClassgetHomePage() { return Index.class; } @Override protected void init() { getResourceSettings().setResourceStreamLocator(new MyOwnStreamLocator()); } }
2. ResourceFinderでリソースを見つけます
ResourceStreamLocatorクラスを拡張するクラスを作成し、次の2つの関数をオーバーライドします
-
Locate(クラスクラズ、文字列パス、文字列スタイル、ロケールロケール、文字列拡張子)
-
LocateByResourceFinder(クラスクラス、文字列パス)
package com.example; import java.util.Locale; import org.apache.wicket.util.file.IResourceFinder; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.locator.ResourceStreamLocator; import org.apache.wicket.util.string.Strings; public class MyOwnFinderStreamLocator extends ResourceStreamLocator { private IResourceFinder resourceFinder; public void addFinder(IResourceFinder resourceFinder) { if (resourceFinder != null) { this.resourceFinder = resourceFinder; } } @Override public IResourceStream locate(Class> clazz, String path, String style, Locale locale, String extension) { String simpleFileName = Strings.lastPathComponent(clazz.getName(), '.') + "." + extension; IResourceStream stream = locate(clazz, simpleFileName); if(stream!=null) return stream; else return super.locate(clazz, path,style,locale,extension); } @Override protected IResourceStream locateByResourceFinder(Class> clazz, String path) { IResourceStream resourceStream = null; resourceStream = resourceFinder.find(clazz, path); if (resourceStream == null) { // try by using class loader resourceStream = locateByClassLoader(clazz, path); } return resourceStream; } }
Wicket Applicationクラス
package com.example; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.file.WebApplicationPath; public class MyApplication extends WebApplication { public ClassgetHomePage() { return Index.class; } @Override protected void init() { //resource finder MyOwnFinderStreamLocator resourceStreamLocator = new MyOwnFinderStreamLocator(); WebApplicationPath webContainerPathFinder = new WebApplicationPath(getServletContext()); webContainerPathFinder.add("/pages/"); resourceStreamLocator.addFinder(webContainerPathFinder); getResourceSettings().setResourceStreamLocator(resourceStreamLocator); } }
完了しました。
ダウンロード–Wicket-1.3-Resource-Loading.zip(7KB)
改札1.4
Wicket 1.4では、より簡単です。 次のディレクトリ構造を参照してください。
-
Hello.java in /src/main/java/com/example/hello
-
Hello.html in /src/main/webapp/pages/com/example/hello
次のように、htmlがinit()メソッドでロードされる場所をカスタマイズできます。
package com.example; import org.apache.wicket.Page; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.settings.IResourceSettings; import com.example.hello.Hello; public class MyApplication extends WebApplication { @Override public Class extends Page> getHomePage() { return Hello.class; //return default page } @Override protected void init() { super.init(); IResourceSettings resourceSettings = getResourceSettings(); resourceSettings.addResourceFolder("pages"); } }
ダウンロード–Wicket1.4-resource-loading.zip(8KB)
Maven ways
または、次のようにMavenリソースタグを介してHTMLファイルをロードする場所を制御できます。
ファイル:pom.xml
WicketExamples src/main/resources src/main/webapp/pages
Mavenの方法では、WebApplicationinit()メソッドをオーバーライドする必要はありません。