gpt4 book ai didi

java - p :graphicImage streamContent nullpointer

转载 作者:行者123 更新时间:2023-11-28 22:19:34 29 4
gpt4 key购买 nike

尝试获取一个 blob 并将其变成流媒体内容。我得到了字节,它们确实被转换成 ByteArrayInputStream 并且我正在返回 StremedContent 图像,但我一直得到这个:

    SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/ConfigEmployee] threw exception
java.io.IOException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:56)
... 21 more

第 56 行是这样的:externalContext.setResponseContentType(streamedContent.getContentType());

我需要补充一点,每个 Image 对象返回流式内容两次。

图像 bean :

public Image(byte[] bytes,String name)
{
this.id=new MyDatabase().getLastId("image")+1;
this.name=name;
this.byteData=bytes;

InputStream is=new ByteArrayInputStream(bytes);
this.image = new DefaultStreamedContent(is,"image/png");

}
public StreamedContent getImage()
{
return image;
}

HTML代码

<div class="dataTable">
<h:form id="imageList">
<p:dataTable var="img" value="#{imageView.images}" rowKey="#{img.id}" rows="10" lazy="true" paginator="true">
<p:column headerText="Image">
<p:graphicImage style="width:80px; height:80px" value="#{img.image}" />
</p:column>
<p:column width="200" headerText="Name">
<h:outputText value="#{img.name}" />
</p:column>
<p:column width="200" headerText="Edit">
<h:commandButton value="Enter" actionListener="#{imageView.convertImage(img)}" action="Image?faces-redirect=true" />
</p:column>
</p:dataTable>


</h:form>
</div>

延迟加载

@Override
public List<Image> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters)
{
db.openDatabase();
ResultSet rs = db.getImage();

List<Image> imgList = new ArrayList<Image>();

try
{
if (rs.last())
this.setRowCount(rs.getRow());

for (rs.absolute(first); rs.next() && first <= (first + pageSize); first++)
{
imgList.add(new Image(rs.getBytes("byteData"), rs.getString("name")));

}
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
db.closeDatabase();
}
return imgList;
}

Primefaces 5.1、JSF 2.2、Tomcat v7.0

最佳答案

bean 的作用域是什么,应该是 View 或 Session 作用域,你将不得不改变你访问你的 bean 的方式。对于动态创建的图像,正在发送两个请求。一种呈现 HTML,即呈现 img 标记。与第二个相比,基于 src 属性触发。该模型必须在后续请求中保留这些值。

所有的解释都在这里很漂亮Display dynamic image from database with p:graphicImage and StreamedContent

关于java - p :graphicImage streamContent nullpointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063864/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com