1

在我的应用程序中,我将数据库中的图像加载到 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 -> 所有图像类型(png、jpg 都是正确的)。我不确定我做错了什么。有人有想法吗?

我使用 Wicket 6.16.0、Tomcat 7.0.54

4

2 回答 2

1

您可以尝试在您的DynamicImageResource configureResponse()或中覆盖并在使用setResponseHeaders()时手动设置内容类型ResourceResponseresponse.setContentType("yourContentType");

于 2014-11-28T06:32:25.640 回答
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。

于 2014-11-28T07:53:55.407 回答