【问题标题】:show image from database, the image property is ok but show other imagen. Using Primefaces显示数据库中的图像,图像属性可以,但显示其他图像。使用 Primefaces
【发布时间】:2013-11-18 16:37:53
【问题描述】:

我尝试在每个人的数据表中显示来自 db 的一些图像,但数据表显示错误的图像。我不知道应用程序从哪里获取正在显示的图像,因为在支持 bean 中,图像是其他的。

<p:column>
   <p:graphicImage id="img2" value="#{listadoPersonasMB.fotoPersona}">
         <f:param name="id2" value="#{item.idPersona}" />
   </p:graphicImage>
 </p:column>

支持豆

  FacesContext context = FacesContext.getCurrentInstance();
        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            return new DefaultStreamedContent();
        } else {
            String studentId = context.getExternalContext().getRequestParameterMap().get("id2");
            FacesContext ctx = FacesContext.getCurrentInstance();
            ValueExpression vex = ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), "#{controladorMB}", ControladorMB.class);
            ControladorMB gMB = (ControladorMB) vex.getValue(ctx.getELContext());
            return new DefaultStreamedContent(new ByteArrayInputStream(gMB.getPersonaBean().devuelveFotoPersona(Integer.parseInt(studentId))));}

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    浏览器在缓存中保留了一些图像我试试这个并且工作正常:

    1- 设置禁用缓存。把它放在 facesconfig.xml 上

      <lifecycle>
        <phase-listener id="nocache">jsfUtil.CacheControlPhaseListener</phase-listener>
    </lifecycle>
    

    2-类代码:

    public class CacheControlPhaseListener implements PhaseListener {
    
    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;
    }
    
    @Override
    public void afterPhase(PhaseEvent event) {
    }
    
    @Override
        public void beforePhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        response.setDateHeader("Expires", 0); // Proxies.
    }
    

    3- 重新加载页面

     <p:dialog width="800" onHide="window.location.reload()" height="600"  appendTo="@(body)" modal="true" widgetVar="dialogModi" header="Editar persona" id="atDlg">  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2011-08-21
      • 2012-10-24
      相关资源
      最近更新 更多