当前位置: 首页 > 面试题库 >

Wicket动态图片网址

郁灿
2023-03-14
问题内容

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

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

漫长的问题:我正在使用在Tomcat 6.0.18中运行的Wicket
1.4.0。图像存储在Postgres数据库中,可通过JDBC检索。图片需要由仅接受图片网址的第三方API渲染。我有一个包含字节数据,mime类型的模型对象,以及一个可以从数据库中提取模型并将其添加到响应流的Resource对象。

有任何想法吗?


问题答案:

我自己才刚刚开始使用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资源只是将查询参数写在黑色背景上。当然,您可以访问数据库或执行任何您想生成图像数据的操作。

最后,执行mvn jetty:run,您将可以通过此URL访问资源。



 类似资料:
  • 上一篇尝试了变换颜色,这一篇来尝试一下动态图片,前面的两步都一致,这里直接说回调吧, 绘制时间 首先要确定在哪里添加回调, viewer.entities.add({ name: 'Rotating rectangle with rotating texture coordinate', rectangle: { coordinates: Cesium.Rectan

  • 我想把.html文件和.java文件放在同一个包中,放在/src/main/java下,但是在创建新的.html文件时,Eclipse提供/webapp作为默认文件夹。有没有办法改变这种行为?

  • 问题内容: 在html模板中,我具有带有动态图像的这种样式: 可以在网络浏览器和android浏览器中使用。但是,使用“ style =”动态显示的背景图像不会在iPad上显示。 我总是可以使用img标签创建动态图像,但是我正在寻找iPad的样式/ css解决方案。 问题答案: 改用 要么

  • 我正在尝试使用wicket创建一个web应用程序。以下是我遵循的步骤: > < li> 我使用以下命令创建了一个maven项目: mvn原型:generate-DarchetypeGroupId=org.apache。wicket-DarchetypeArtifactId=wicket原型快速启动-DarchetypeVersion=6.6.0-DgroupId=com。mycompany-Dar

  • 本文向大家介绍js动态切换图片的方法,包括了js动态切换图片的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js动态切换图片的方法。分享给大家供大家参考。具体实现方法如下: index.css文件如下: index.html如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 为什么网页只能正确显示一张静态图片啊 求解