Image 使用标记的tapestry显示blob

Image 使用标记的tapestry显示blob,image,embed,blob,markup,tapestry,Image,Embed,Blob,Markup,Tapestry,我已经在db中保存了blob图像,我希望使用它将blob从mysql嵌入到tapestry中的标记中。 我在网上找到了。 不了解writer.element是如何工作的 我觉得这样应该行得通 @SupportsInformalParameters public class DBImage { @Parameter(required = true) private Image image; @Inject private Compo

我已经在db中保存了blob图像,我希望使用它将blob从mysql嵌入到tapestry中的标记中。 我在网上找到了。 不了解writer.element是如何工作的

我觉得这样应该行得通

    @SupportsInformalParameters
    public class DBImage {

      @Parameter(required = true)
      private Image image;
      @Inject
      private ComponentResources resources;


      boolean beginRender(MarkupWriter writer,byte[] array){
            writer.element("img", "src", "data:image/png;base64,"+array,);

            resources.renderInformalParameters(writer);

            writer.end();

            return false;
      }
    }
然后在每个页面类上调用该组件

@Property 
private DBImage image.beginRedner(entity.getBlobImage);

我还没有尝试在tapestry中使用WITHIMAGES-我相信它“可以”工作,但要调用,您只需在tml中包含以下内容:

<t:DBImage image="${entity.BlobImage}" />
<img src="${imageLink}" />
请求2只返回图像数据的字节流

让我们从第二个请求开始,因为这样做更有意义

在tapestry中,通过创建页面类和可选的
tml
模板来处理单个请求。要提供字节流,您只需要page类。要向页面传递参数或上下文,请使用上下文参数

package myproject.pages;

public class MyImage
{
    public StreamResponse onActivate(String parameter)
    {
        // retrieve your image using the context parameter(s)
        final InputStream imageStream = getImage(parameter);

        return new StreamResponse()
        {
            @Override
            public InputStream getStream() throws IOException
            {
                return imageStream;
            }

            @Override
            String getContentType()
            {
                return "image/png";
            }

            @Override
            void prepareResponse(Response response)
            {}
        };
    }
}
此时,您可以使用url请求/呈现图像”http://host/context/app/myimage/parameter". 现在你只需要在你的img标签中包含这个,即请求1

因此,您需要首先生成链接,这需要在page类中完成:

包myproject.pages

public class MyPage
{
    @Inject
    private PageRenderLinkSource pageLink;

    public Link getImageLink()
    {
        return pageLink.createPageRenderLinkWithContext(MyImage.class, parameter);
    }
}
剩下的就是在tml中使用此链接:

<t:DBImage image="${entity.BlobImage}" />
<img src="${imageLink}" />

显然,您需要连接参数和检索。

链接到文档