Image 使用标记的tapestry显示blob
我已经在db中保存了blob图像,我希望使用它将blob从mysql嵌入到tapestry中的标记中。 我在网上找到了。 不了解writer.element是如何工作的 我觉得这样应该行得通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
@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}" />
显然,您需要连接参数和检索。链接到文档