gpt4 book ai didi

java - Wicket 口动态图像 URL

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:16 25 4
gpt4 key购买 nike

简短的问题:我需要使用 Wicket 将从数据库中提取的动态图像转换为 URL,而无需向显示页面添加组件(例如使用 NonCachingImage)。

完美的解决方案(我已经在其他框架中实现)只是创建一个页面,将图像 ID 作为 url 参数并将图像呈现到响应流。不幸的是,Wicket 的页面类扩展了围绕 MarkupStreams 的 MarkupContainer。 MarkupStreams 不太适合直接呈现字节数据。

长问题:我正在使用在 Tomcat 6.0.18 中运行的 Wicket 1.4.0。图像存储在 Postgres 数据库中,通过 JDBC 检索。图像需要由只接受图像 URL 的第三方 API 呈现。我有一个模型对象,其中包含字节数据、MIME 类型和一个可以从数据库中提取模型并将其添加到响应流的资源对象。

有什么想法吗?

最佳答案

我自己才刚刚开始使用 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的资源了。 .

关于java - Wicket 口动态图像 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com