私自身、Wicket を使い始めたばかりですが、リソースを独自の URL を持つ共有リソースとしてマウントするだけです。オーバーライドinit()
してApplication
リソースを登録するだけです
getSharedResources().add(resourceKey, dynamicImageResource);
次に、共有リソースとしてマウントします
mountSharedResource(path, resourceKey);
何らかの理由で、まだ完全には把握できていませんが、アプリケーションのクラス名を に渡すリソース キーの先頭に追加する必要がありますmountSharedResource()
。
いくつかのボーナス投票の完全に機能する例を追加しましょう! 最初に空の Wicket テンプレートを作成します
mvn archetype:create -DarchetypeGroupId=org.apache.wicket \
-DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=1.4.0 -DgroupId=com.mycompany \
-DartifactId=myproject
次に、以下を追加してinit()
メソッドをオーバーライドします。WicketApplication
@Override
protected void init() {
final String resourceKey = "DYN_IMG_KEY";
final String queryParm = "id";
getSharedResources().add(resourceKey, new Resource() {
@Override
public IResourceStream getResourceStream() {
final String query = getParameters().getString(queryParm);
// generate an image containing the query argument
final BufferedImage img = new BufferedImage(100, 100,
BufferedImage.TYPE_INT_RGB);
final Graphics2D g2 = img.createGraphics();
g2.setColor(Color.WHITE);
g2.drawString(query, img.getWidth() / 2, img.getHeight() / 2);
// return the image as a PNG stream
return new AbstractResourceStreamWriter() {
public String getContentType() {
return "image/png";
}
public void write(OutputStream output) {
try { ImageIO.write(img, "png", output); }
catch (IOException ex) { /* never swallow exceptions! */ }
}
};
}
});
mountSharedResource("/resource", Application.class.getName() + "/" +
resourceKey);
}
少し動的な PNG リソースは、クエリ パラメーターを黒の背景に書き込むだけです。もちろん、DB にアクセスしたり、好きなように画像データを生成したりできます。
最後に を実行すると、この URLmvn jetty:run
のリソースにアクセスできるようになります。