2014-05-08 6 views
0

J'essaie d'avoir une image graphique dynamique à partir de la base de données. J'ai trouvé quelques questions en accord ici dans SO mais d'une manière ou d'une autre cela ne fonctionne pas.Image graphique dynamique

Page:

<p:dataList styleClass="routeDatalist" value="#{searchRoutesBean.foundRoutes}" var="uiRoute"> 
    <p:outputLabel value="USERID #{uiRoute.owner.id}"/> 
    <h:graphicImage value="#{photoStreamer.streamedContent}" styleClass="userProfileImage"> 
    <f:param name="userId" value="#{uiRoute.owner.id}" /> 
    </h:graphicImage> 
<p:/dataList> 

Je reçois ma liste d'objets de sauvegarde haricots

@SessionScoped 
    @ManagedBean 
    public class SearchRoutesBean{ 
    private List<UIRoute> foundRoutes; 
     ... 
    } 

J'ai créé un backing bean qui devrait prendre la bytearray de userimage et créer un contenu diffusé en continu

@ManagedBean(name = "photoStreamer") 
@ApplicationScoped 
public class PhotoStreamer implements Serializable { 

    @Autowired 
    UserService userService; 

    private StreamedContent streamedContent; 

    public StreamedContent getStreamedContent() { 
    ExternalContext externalContext = FacesContext.getCurrentInstance() 
     .getExternalContext(); 
    String userId = externalContext.getRequestParameterMap().get("userId"); 

    if (StringUtils.isNotBlank(userId)) { 

     User user; 
     try { 
     user = userService.getUserById(Long.valueOf(userId)); 
     byte[] image = user.getProfileJpegImage(); 
     if (image != null && image.length > 0) { 
      return new DefaultStreamedContent(new ByteArrayInputStream(
       image), "image/jpeg"); 
     } else { 
      BufferedImage bufferedImg = new BufferedImage(250, 350, 
       BufferedImage.TYPE_INT_RGB); 
      Graphics2D g2 = bufferedImg.createGraphics(); 
      g2.drawString("User has no ProfilImage", 50, 175); 
      ByteArrayOutputStream os = new ByteArrayOutputStream(); 

      ImageIO.write(bufferedImg, "png", os); 

      return new DefaultStreamedContent(new ByteArrayInputStream(
       os.toByteArray()), "image/png"); 
     } 
     } catch (NumberFormatException | UserServiceException | IOException e) { 
     throw new IllegalStateException(e); 
     } 

    } 
    return null; 

    } 
} 

Je ne sais pas pourquoi mais le paramètre donné userId est toujours nul.

Est-ce que quelqu'un sait quel pourrait être le problème? BR

+1

suivre ce tutoriel https://www.youtube.com/watch?v=imiBwk_xqaE – Makky

+0

C'est excactly ce que je fais ?! La seule différence est que j'utilise un dataList au lieu de dataTable. – DanDiesel

+0

essayez avec datatable et voir si cela fonctionne pour vous d'abord. – Makky

Répondre

1

Qu'en est-

<p:dataList styleClass="routeDatalist" value="#{searchRoutesBean.foundRoutes}" var="uiRoute"> 
    <p:outputLabel value="USERID #{uiRoute.owner.id}"/> 
    <h:graphicImage value="#{photoStreamer.streamedContent(uiRoute.owner.id)}" styleClass="userProfileImage"/> 
<p:/dataList> 

+

public StreamedContent getStreamedContent(String userId) { 

if (StringUtils.isNotBlank(userId)) { 

     User user; 
     try { 
     ... 
    } 
+0

C'est ce que j'ai aussi essayé mais j'ai trouvé le problème ty :-) – DanDiesel