gpt4 book ai didi

jsf - 在jsf中读取图像

转载 作者:行者123 更新时间:2023-12-04 06:23:41 24 4
gpt4 key购买 nike

我正在使用以下代码从数据库读取图像,但是当我在 h:datatable 值中调用 pb 的 getter 方法以在 jsf 页面上显示图像时,出现错误“oracle.sql.BLOB 无法转换为 java.lang.String” .有什么想法吗?

Java 类具有 pb 属性。

读取图像的Java代码:

public List<ImageBean> getPb() throws Exception {
int i = 0;
List<ImageBean> pb= new ArrayList<ImageBean>();
String url = "jdbc:oracle:thin:@localhost:1521:globldb3";
String username = "scott";
String password = "tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT name,image FROM save_image";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet resultSet = pstmt.executeQuery();
while (resultSet.next()) {
String n =resultSet.getString(1);
File image = new File("D:\\java3.JPG");
FileOutputStream fos = new FileOutputStream(image);
byte[] buffer = new byte[1];
InputStream is = resultSet.getBinaryStream(2);
while (is.read(buffer) > 0) {
fos.write(buffer);
}
pb.add(i,new ImageBean(n,resultSet.getBlob(2)));
i++;
fos.close();
}
conn.close();
return pb;0
}

JSF 页面:-
<h:dataTable  styleClass="panelGridColums" value="#{tableBean.pb}" var="i" border="1" >
<h:column>
<f:facet name="header">Id</f:facet>
<h:graphicImage value="#{i.pimage}" />
</h:column>
</h:dataTable>

最佳答案

你在这里犯了一个概念上的错误。在 HTML 中,图像由 <img> 表示。带有 src 的元素应该指向图像的 的属性网址 .这是在由 <h:graphicImage> 表示的 JSF 中value 的组件属性将呈现 src属性。它期望一个 String依次代表图像的 网址 .它不需要一些 blob,也不需要字节数组。
您在这里基本上需要一个 servlet。您应该让图像的 URL 和图像标识符一起作为请求参数或路径信息指向该 servlet,并让 servlet 将图像内容从数据库流式传输到响应。
例如。

<h:dataTable value="#{bean.images}" var="image">
<h:column><h:graphicImage value="images/#{image.id}" /></h:column>
</h:dataTable>
哪里 #{image.id}返回唯一的图像标识符。在映射到 URL 模式 /images/* 的 servlet 中然后你可以得到它如下
String imageId = request.getPathInfo().substring(1);
最后使用这个标识符来获取内容为 InputStream从数据库中并将其写入 OutputStream沿着一组正确的 header 的响应。
也可以看看:
  • How do I load an image from a DB inside a JSF page using managed beans?
  • 关于jsf - 在jsf中读取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269087/

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