Come usare con DefaultStreamedContent in ui: repeat?

Stavo cercando di visualizzare un pannello in cui l’utente può visualizzare un elenco di categorie di articoli (visualizzati come immagini) e facendo clic su essi possono visualizzare i prodotti all’interno della categoria (le immagini verranno visualizzate)

Per la visualizzazione della categoria di articoli, ho usato l’ui: repeat nad the support bean calss Di seguito è riportato il mio codice xhtml

  

E le parti del codice Bean gestito

 private ByteArrayOutputStream baos = new ByteArrayOutputStream(); private List imageList = new ArrayList(); public List getImages(){ for (int i = 0; i < sdh.getNumOfImages(); i++) { imageID = imageIDArray.get(i); ImageService imgSer = new ImageService(); imgList.add(imageID); imgSer.setData(imageID); baos = imgSer.getImage(); try { imageList.add(new DefaultStreamedContent(new ByteArrayInputStream(baos.toByteArray()))); } catch (Exception ex) { ex.printStackTrace(); } } imageNum = 0; return imageList; } public StreamedContent getData() { baos = imageList.get(imageNum); //imageList.add(baos); imageNum++; return new DefaultStreamedContent(new ByteArrayInputStream(baos.toByteArray())); } 

Ora il mio problema se non annullo il file “imageList.add (baos)” in “getData”, le immagini non vengono visualizzate. Ora voglio davvero sapere come funziona ‘ui: repeat’, dato che ‘imageList’ contiene le immagini e io posso salvare lo stesso se richiesto in entrambi i metodi. Se si specifica un numero fisso (es: ‘imageList.get (0)’) nel metodo ‘getData’, la stessa immagine viene mostrata più volte. Dove se metto il ‘imageNum’ senza ‘imageList.add (baos)’ genera errore ‘Errore nello streaming di risorse dinamiche’

Ho stancato il suggerimento di Bjorn Pollex e ho apportato i cambiamenti necessari ma ora le immagini non appaiono

In questo modo non è ansible utilizzare . Dovresti piuttosto eseguire iterazioni su una raccolta di identificatori di immagini univoci, non su una raccolta di StreamedContent . Questi identificatori di immagine univoci devono quindi essere passati come a che a sua volta genererà gli URL corretti per il browser.

      

Il tuo bean gestito #{data} deve avere solo un:

 private List imageIds; // +getter 

#{imageStreamer} dovrebbe essere un bean gestito con scope dell’applicazione separato che ha un aspetto sostanzialmente simile a questo:

 @ManagedBean @ApplicationScoped public class ImageStreamer { @EJB private ImageService service; public StreamedContent getImage() throws IOException { FacesContext context = FacesContext.getCurrentInstance(); if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { // So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL. return new DefaultStreamedContent(); } else { // So, browser is requesting the image. Get ID value from actual request param. String id = context.getExternalContext().getRequestParameterMap().get("id"); Image image = service.find(Long.valueOf(id)); return new DefaultStreamedContent(new ByteArrayInputStream(image.getBytes())); } } } 

Hai usato ui errato: ripeti tag. Hai attributo var ma non puoi utilizzarlo in p: attributo del valore del tag graphicImage.Vedi l’utilizzo del campione,