我自己才刚刚开始使用 Wicket,但我只是将资源安装为具有自己 URL 的共享资源。您只需在 Application 中覆盖 init() 并使用
注册资源
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
然后,通过添加以下内容覆盖WicketApplication 中的init() 方法:
@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资源只是将查询参数写在黑色背景上。当然,您可以访问您的数据库或做任何您想做的事情来生成图像数据。
最后执行mvn jetty:run,就可以访问this URL的资源了。