使用Tapestry5在我的应用程序之外显示图像

时间:2011-10-09 10:29:45

标签: java tapestry

我正在使用Tapestry开发我的第一个项目,我即将完成,除了图像..

我想要什么?我只需在应用程序外显示图片,例如: /home/app/images/image.jpg

我尝试了什么?我一直在“谷歌搜索”并阅读Tapestry5论坛,我发现了这一点:http://wiki.apache.org/tapestry/Tapestry5HowToStreamAnExistingBinaryFile

我按照步骤创建了类但是我需要显示嵌入在另一个页面上的图像(所以我不能使用ImagePage),我试过这个:

在页面java类

public StreamResponse getImage() {
        InputStream input = DetallesMultimedia.class
                .getResourceAsStream("/home/santi/Escritorio/evolution-of-mario.jpg"); //On application, i will retrieve this from DB
    return new JPEGInline(input,"hellow");
}

在页面模板上

...
<img src="${image}" alt:image/>
...

...
${image}
...

很明显,这不起作用,我真的不知道怎么能这样做。我读到了关于在一个事件上加载图像的事情(在上面的HowTo中回复了那个事件上的OutputStream),但是我的英语非常糟糕(我相信你已经注意到了)我不明白我怎么能那样做。

你能帮帮我吗?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我从未在维基页面上看过这些示例。下面是一些关于如何使用StreamResponse在类路径上加载图像的代码。

@Inject
private ComponentResources resources;

@OnEvent(value = "GET_IMAGE_STREAM_EVENT")
private Object getProfilePic() throws Exception {


    InputStream openStream = DetallesMultimedia.class.getResourceAsStream("/home/santi/Escritorio/evolution-of-mario.jpg");
    byte[] imageBytes = IOUtils.toByteArray(openStream);
    final ByteArrayInputStream output = new ByteArrayInputStream(imageBytes);

    final StreamResponse response = new StreamResponse() {

        public String getContentType() {
           "image/jpegOrPngOrGif";
        }

        public InputStream getStream() throws IOException {
            return output;
        }

        public void prepareResponse(Response response) {
            // add response headers if you need to here
        }

    };
    return response;
}

public String getPicUrl() throws Exception {
    return resources.createFormEventLink("GET_IMAGE_STREAM_EVENT");
}

在你的模板中:

<img src="${picUrl}"/>