Wicket应用程序:图像解释为text / html

时间:2014-11-27 19:44:04

标签: java image wicket wicket-6

在我的应用程序中,我将数据库中的图像加载到Wicket图像对象中并显示它。这大部分时间都有效,但有一些令人讨厌的副作用(有时候列表中的图像交换,控制台中出现js错误)

我得到的错误是:

Resource interpreted as Image but transferred with MIME type text/html

这是我的 java

final IResource imageResource = new DynamicImageResource() {
    @Override
    protected byte[] getImageData(final IResource.Attributes attributes) {
        return bean.getImage();
    }
};

和我的 html

<img wicket:id="image">

这是在浏览器中呈现的html代码:

<img src="./.?308-IResourceListener-homePanel-tabPanel-tabs-panel-data-rows-3-image">

我查看了tomcat的web.xml以获取mime-mapping - &gt;所有图像类型(png,jpg都是正确的)。我不确定我做错了什么。有人有想法吗?

我使用Wicket 6.16.0,Tomcat 7.0.54

2 个答案:

答案 0 :(得分:1)

您可以尝试覆盖DynamicImageResource configureResponse()setResponseHeaders(),并使用ResourceResponse

response.setContentType("yourContentType");上手动设置内容类型

答案 1 :(得分:0)

您的getImage()可能会返回null

这是DynamicImageResource

中发生的事情
@Override
protected ResourceResponse newResourceResponse(final Attributes attributes)
{
    ...

    if (response.dataNeedsToBeWritten(attributes))
    {
        ....

        final byte[] imageData = getImageData(attributes);
        if (imageData == null)
        {
            response.setError(HttpServletResponse.SC_NOT_FOUND);
        }
        else
        {
            response.setContentType("image/" + getFormat());
            response.setWriteCallback(new WriteCallback()
            {
                @Override
                public void writeData(final Attributes attributes)
                {
                    attributes.getResponse().write(imageData);
                }
            });

            configureResponse(response, attributes);
        }
        ...

因此mimetype将设置为getFormat(),默认为PNG。