自分自身でWicketを使い始めたばかりですが、リソースを独自のURLで共有リソースとしてマウントするだけです。あなたは自分のApplication
でinit()
をオーバーライドし、その後
getSharedResources().add(resourceKey, dynamicImageResource);
でリソースを登録するには、私はまだ完全に、あなたが持って把握していないことを、いくつかの理由
mountSharedResource(path, resourceKey);
で共有リソースとしてマウントmountSharedResource()
に渡すリソースキーにアプリケーションのクラス名を付加します。
いくつかのボーナス投票に完全な実例を追加してみましょう。まず加えることによりWicketApplication
でinit()
メソッドをオーバーライドし、その後
mvn archetype:create -DarchetypeGroupId=org.apache.wicket \
-DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=1.4.0 -DgroupId=com.mycompany \
-DartifactId=myproject
で空Wicketのテンプレートを作成します。
@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にアクセスしたり、好きなように画像データを作成することができます。
最後にmvn jetty:run
を実行すると、this URLのリソースにアクセスできます。ここで
これを補う:クラスと 'getSharedResources()。putClassAlias(ListInitializer.class、" list ");を実装するIInitializerを使用します。新しいListInitializer()。init(this); 'あなたはイメージURLのクラスパス全体を前に乗り越えることができるはずです。 – Tim
詳細情報を提供できますか、ティム?私はWicketで 'ListInitializer'クラスを見つけることができず、' putClassAlias'の利用可能なドキュメントは役に立ちません。 – janko
ListInitializerは私の実装です。自分の例を自分の答えに展開します。 – Tim