Ism*_*a90 0 jsf primefaces jsf-2
我试图显示一个存储在MySQL中的BLOB中的图像,OpenJpa用于持久化.我正在使用<p:graphicImage>
用户个人资料图片的位置,但打开页面时出错.
这是加载照片的页面代码.
<h:panelGrid columns="2">
<p:graphicImage value="#{login.getImage()}" alt="/sistema.ciclos.calidad/resources/perfil/default.png" width="150px" height="150px">
<f:param name="id" value="#{param.id}" />
</p:graphicImage>
<h:panelGrid columns="1">
<h:outputLabel id="nombre" value="#{login.usuario.getNombreCompleto()}"></h:outputLabel>
<h:outputLabel id="cargo" value="#{login.usuario.cargo.cargo}"></h:outputLabel>
<h:outputLabel id="correo" value="#{login.usuario.correo}"></h:outputLabel>
</h:panelGrid>
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)
这个方法在bean中返回照片.
@ManagedProperty("#{param.id}")
private Long id;
@PostConstruct
public void init() {
...
id=usuario.getIdUsuario();
}
...
public StreamedContent getImage() {
byte[] bytes=usuario.getFotoPerfil();
return new DefaultStreamedContent(new ByteArrayInputStream(bytes));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Primefaces 4.0,Jsf 2.0,maven.我试过这篇文章(Post)中的内容,但没有发生
javax.servlet.ServletException: org.primefaces.model.DefaultStreamedContent cannot be cast to java.lang.String
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98)
cl.im.ciclos.service.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
cl.im.ciclos.service.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
cl.im.ciclos.service.security.LoginFilter.doFilter(LoginFilter.java:52)
root cause
java.lang.ClassCastException: org.primefaces.model.DefaultStreamedContent cannot be cast to java.lang.String
com.sun.faces.renderkit.RenderKitUtils.getImageSource(RenderKitUtils.java:1282)
com.sun.faces.renderkit.html_basic.ImageRenderer.encodeEnd(ImageRenderer.java:97)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:295)
com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98)
cl.im.ciclos.service.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
cl.im.ciclos.service.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
cl.im.ciclos.service.security.LoginFilter.doFilter(LoginFilter.java:52)
Run Code Online (Sandbox Code Playgroud)
这条线来自堆栈跟踪
com.sun.faces.renderkit.html_basic.ImageRenderer.encodeEnd(ImageRenderer.java:97)
Run Code Online (Sandbox Code Playgroud)
告诉你,你实际上是在使用<h:graphicImage>
,而不是<p:graphicImage>
.前者确实不支持DefaultStreamedContent
,这完全解释了这个问题.您应该更改<h:graphicImage>
为<p:graphicImage>
以便能够使用DefaultStreamedContent
.
所以,要么你没有运行你认为正在运行的代码(可能是你编辑h:
过p:
,但不知何故忘记或无法重建/重新部署/重启),或者你正在查看XHTML源代码中的错误位置企图天真的事业.此异常至少不是由您在问题中发布的XHTML源代码中的任何内容引起的.
如果您实际使用<p:graphicImage>
,则org.primefaces.component.graphicimage.GraphicImageRenderer
该类将出现在堆栈跟踪中的此位置.
归档时间: |
|
查看次数: |
5761 次 |
最近记录: |