Dynamisches p:graphicimage im Datagrid

Templarthelast

Bekanntes Mitglied
Hallo zusammen,

für Webinterface auf einem JBoss eines real gespielen Tombolaspiels will ich alle automatisch generieren Karten als Grafiken in einem Primefaces Datagrid ausgeben.

Allerdings stoße ich bei diesem Vorhaben auf diese Exception:
Code:
[org.primefaces.application.PrimeResourceHandler] (http-localhost-127.0.0.1-8081-1) Error in streaming dynamic resource.

Da man die generierten Bilder sowieso nicht mit der var ausgeben gehe ich über den <f😛aram> wert mit dem ich dann die Bild liste durchgehe.

Das Datagrid:
HTML:
<p:dataGrid value="#{main.game.cards}" var="cad" columns="3"
								rows="12" paginator="true"
					 			paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
								rowsPerPageTemplate="5,10,25, 50, 100"> 
								<p:panel header="Nr. #{cad.id}">
								 		
									<p:graphicImage cache="true" value="#{main.fileContent}">
									 	<f:param name="image_id" value="#{cad.id}"></f:param>
									</p:graphicImage>	 

								</p:panel>
							</p:dataGrid>


Die Funktion für die Bilder:

Java:
public StreamedContent getFileContent() {
		logger.trace("Entered method getFileContent.");
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		String photoId = externalContext.getRequestParameterMap().get("image_id");
		System.out.println("image: " + photoId);
		if (photoId == null || photoId.equals("")) {
			fileContent = defaultFileContent;
			logger.info("Id was null or empty. Retrieved default file content.");
		} else {
			int parsedId = Integer.parseInt(photoId);
			logger.info("parseid: " + parsedId);
			int id = parsedId;
			
			
			BufferedImage image = game.getCards().get(id).getImage();
			 System.out.println("id " + id);
			 ByteArrayOutputStream os = new ByteArrayOutputStream();
			 try {
			 ImageIO.write(image, "png", os);
			 } catch (IOException e) {
			 // TODO Auto-generated catch block
			 e.printStackTrace();
			 }
			 fileContent = new DefaultStreamedContent(new
			 ByteArrayInputStream(os.toByteArray()), "image/png");

			

		}
		logger.trace("Exited method getFileContent.");
		return fileContent;
	}
 
Zuletzt bearbeitet:
[XML]
<p:graphicImage cache="true" value="#{main.getFileContent(cad.id)}">
</p:graphicImage>
[/XML]

Java:
public StreamedContent getFileContent(String photoId ) {
...
}

Greetz
 

Zurück
Oben