Вам может пригодиться этот поток stackoverflow - Как использовать p: graphicImage с StreamedContent в p: dataTable?
Но, в принципе, кажется, что в p есть по крайней мере две вещи: graphicimage, о которых вы должны знать (я не знаю, почему примитивы официальной документации и демоверсии не говорят ни слова об этом, но в любом случае)
- ваше изображение недоступно на этапе RENDER_RESPONSE
- @ ViewScoped не будет работать
Так вот код, который работал для меня
[1] Управляемый bean-компонент является областью действия сеанса, и атрибут bean-компонента не DefaultStreamedContent (который не сериализуем), а byte [].
@ManagedBean
@SessionScoped
public class ImageController implements Serializable{
private byte[] img;
[2] метод получения динамического изображения -
public DefaultStreamedContent getContent(){
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
}else{
if (img == null){
return new DefaultStreamedContent();
}else{
return new DefaultStreamedContent(new ByteArrayInputStream(img), "image/png");
}
}
}