我正在使用我的JSF 2项目Primefaces 3.0.M2
作为主要的资源库。它到目前为止工作得非常好,但是graphicImage组件似乎已被打破。它只渲染图像一次 - 我加载给定的页面,显示图像,当我重新加载同一页面时,图像(streamedcontent)消失了,在我的日志中我只收到一个
29.08.2011 08:39:03 org.primefaces.application.PrimeResourceHandler handleResourceRequest
SCHWERWIEGEND: Error in streaming dynamic resource.
是否还有其他正确/良好/最好的方式来显示二进制数据流中的图像?或者我是否必须创建一个servlet来处理这个问题?
我正在使用
答案 0 :(得分:0)
这听起来像是Managed Bean的StreamedContent属性被重置为null,因为bean正在被销毁并在回发时重新创建。
这可能是因为你的bean是@RequestScoped
。
尝试将您的bean设置为@ViewScoped
或@SessionScoped
,以便它可以在帖子后面继续存在。
答案 1 :(得分:0)
您可能会发现此stackoverflow线程很有用 - How to use p:graphicImage with StreamedContent within p:dataTable?
但基本上,似乎至少有两件关于p:graphicimage的东西,你必须知道(我不知道为什么素数的官方文档和演示并没有说明这一点,但无论如何)
所以这是适合我的代码
[1]托管bean是会话范围的,bean属性不是DefaultStreamedContent(不可序列化),而是byte []。
@ManagedBean
@SessionScoped
public class ImageController implements Serializable{
private byte[] img;
[2]动态图像getter方法是
public DefaultStreamedContent getContent(){
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
}else{
if (img == null){
return new DefaultStreamedContent();
}else{
return new DefaultStreamedContent(new ByteArrayInputStream(img), "image/png");
}
}
}