通过Servlet使用JSF显示数据库中的图像时出现问题

通过Servlet使用JSF显示数据库中的图像时出现问题,jsf,servlets,jsf-2,Jsf,Servlets,Jsf 2,编辑:此问题的原因是由于与servlet无关的错误 我正在从事一个JSF2/JPA/EJB3项目,该项目允许用户上传自己的照片并将其存储在数据库中。通过servlet可以从数据库加载图像。然而,有一个问题;更改图片并发布页面时,图像将变为空白。servlet似乎没有被调用 网页: <h:form> <h:graphicImage value="image?fileId=#{bean.currentUser.photo.id}"/> <3rd part

编辑:此问题的原因是由于与servlet无关的错误

我正在从事一个JSF2/JPA/EJB3项目,该项目允许用户上传自己的照片并将其存储在数据库中。通过servlet可以从数据库加载图像。然而,有一个问题;更改图片并发布页面时,图像将变为空白。servlet似乎没有被调用

网页:

<h:form>
    <h:graphicImage value="image?fileId=#{bean.currentUser.photo.id}"/>
    <3rd party file upload component (primeFaces)/>
    <h:commandButton value="post"/>
</h:form>

我猜ImageServlet中的doGet只在Get上被调用。强制一个新的GET with faces redirect=true可以工作,但是有可能让servlet也在POST上工作吗?

您似乎认为图像作为包含
属性的HTML页面的HTTP响应的一部分下载是错误的。您使用的是上下文相对路径(即
src
属性中没有前导斜杠和域,它完全依赖于当前请求URL-浏览器地址栏中的URL)。HTML页面可能会被发布到另一个上下文/文件夹中,从而导致图像从此点无法访问。尝试使用绝对路径或域相对路径

<h:graphicImage value="#{request.contextPath}/image?fileId=#{bean.currentUser.photo.id}" />


如果仍然无效,那么仔细看看Firebug的分析。

您似乎认为图像是作为包含
属性的HTML页面的HTTP响应的一部分下载的,这是错误的。您使用的是上下文相对路径(即
src
属性中没有前导斜杠和域,它完全依赖于当前请求URL-浏览器地址栏中的URL)。HTML页面可能会被发布到另一个上下文/文件夹中,从而导致图像从此点无法访问。尝试使用绝对路径或域相对路径

<h:graphicImage value="#{request.contextPath}/image?fileId=#{bean.currentUser.photo.id}" />


如果仍然是徒劳的,那么仔细看看Firebug的分析。

事实证明,是我的控制器中的一个bug导致currentUser过时;value=“image?fileId=…”在这种特定情况下有效,因为网页位于根目录中。谢谢你的回答,我还是有点困惑在一篇帖子之后是如何获取图像的;value=“image?fileId=…”在这种特定情况下有效,因为网页位于根目录中。谢谢你的回答,我还是有点困惑,在一篇帖子之后是如何获取图像的。
<h:graphicImage value="#{request.contextPath}/image?fileId=#{bean.currentUser.photo.id}" />