Итерация загрузки изображений с @PostConstruct
У меня есть два файла [index.xhtml, details.xhtml]
index.xhtml
...
<c:if test="#{not empty itemBean.listItem}">
<ui:repeat var="items" value="${itemBean.listItem}">
<h:link value="#{items.name}" outcome="/views/item/details?faces-redirect=true&id=#{items.idItem}">
<p:graphicImage value="#{itemBean.image}">
<f:param name="id" value="#{itemBean.idFromViewProperty}" />
</p:graphicImage>
</h:link>
</ui:repeat>
</c:if>
...
details.xhtml (на страницу с подробностями он хочет перейти, скачав идентификатор параметра адреса - возможность отправить кому-то ссылку)
<h:form>
<c:if test="${empty itemDetailsBean.dbImage1}">
//I have here are different descriptive data about this product
<div class="img">
<p:graphicImage styleClass="img" value="#{itemDetailsBean.dbImage1}"/>
</div>
//I have here are different descriptive data about this product
</c:if>
</h:form>
ItemBean
@Named
@ManagedBean
@RequestScoped
public class ItemBean implements Serializable {
... //other variable
private StreamedContent image;
public StreamedContent getImage() {
return image;
}
@PostConstruct
public void init() {
if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
image = new DefaultStreamedContent();
} else {
image = new DefaultStreamedContent(new ByteArrayInputStream(wardrobeService.getItemById(id).getPhoto1()));
idFromViewProperty = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"), 10);
this.selectedItem = wardrobeService.getItemById(idFromViewProperty);
if (selectedItem != null && selectedItem.getPhoto1() != null) {
byte[] photos = selectedItem.getPhoto1();
InputStream dbStream = new ByteArrayInputStream(photos);
dbImage1 = new DefaultStreamedContent(dbStream, "image/jpeg");
}
}
}
}
@ManagedProperty("#{param.id}")
private Long id;
public void setId(Long id) {
this.id = id;
}
}
ItemDetailsBean
@Named
@ManagedBean
@RequestScoped
public class ItemDetailsBean implements Serializable {
@Inject
ItemService itemService;
@Inject
AuthBean authBean;
private Item selectedItem;
private StreamedContent dbImage1;
public StreamedContent getDbImage1() {
return dbImage1;
}
public void setDbImage1(StreamedContent dbImage1) {
this.dbImage1 = dbImage1;
}
@ManagedProperty("#{param.id}")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@PostConstruct
public void init() {
if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
dbImage1 = new DefaultStreamedContent();
} else {
this.selectedItem = itemService.getItemById(id);
if (selectedItem != null && selectedItem.getPhoto1() != null) {
byte[] photos = selectedItem.getPhoto1();
this.dbImage1 = new DefaultStreamedContent(new ByteArrayInputStream(photos), "image/jpeg");
}
}
}
}
В index.xhtml я хотел бы отображать изображения в цикле. Когда пользователь нажимает на изображение, я хотел бы перенаправить на страницу с подробной информацией о выбранном изображении.Идентификатор должен быть передан в параметре - позволит отправить ссылку другу.