Wicket で、サーブレットコンテキストに置いたファイルを、HTTPリクエストで動作する WebPage から参照するのに、
ResourceReference で参照するであろう。
JavaScriptResourceReference や、CssResourceReference など、参照するものがほぼ、決まっている。
だからこれらの明示的なクラスがある。
問題は、任意の形式を WebPage クラスと同じ階層に置いたファイルを参照できるようにするか?である。
方法の前に、抑えておきたいのは、
org.apache.wicket.markup.html.SecurePackageResourceGuard
という、org.apache.wicket.markup.html.PackageResourceGuard implements IPackageResourceGuard
のサブクラスの中で、ファイルの拡張子のパターンで、アクセスが制限(Guard)されてることだ。
SecurePackageResourceGuard の中で許可されてるファイル拡張子パターンは、以下のとおり。
*.js
*.css
*.png
*.jpg
*.jpeg
*.gif
*.ico
*.cur
*.html
*.txt
*.swf
*.bmp
*.svg
*.eot
*.ttf
*.woff
XMLやCSVなどは含まれていないのである。
含まれていないファイル拡張子は、許可をする設定が必要で WebApplication クラスの init() で実行する。
SecurePackageResourceGuard を生成して、addPattern メソッドで追加したら、PackageResourceGuard として登録をし直すのである。
CSV形式を設定する場合、、、
public class MyApplication extends WebApplication{
@Override
protected void init(){
SecurePackageResourceGuard mySecurePackageResourceGuard = new SecurePackageResourceGuard();
mySecurePackageResourceGuard.addPattern("+*.csv");
getResourceSettings().setPackageResourceGuard(mySecurePackageResourceGuard);
}
}
ということをした上で、WebPage クラスでは、
new PackageResourceReference(SampleWebPage.class, "sample.csv")
と、Wicket馴染みの org.apache.wicket.request.resource.IResource
として参照→振る舞いの処理ができる。
注意:
SecurePackageResourceGuard の addPattern 実行で渡すファイルパターンは、
*.csv → +*.csv
のように、'+' で始まらないと Exception が発生する。