Я пытаюсь отобразить изображение клиента (хранится в CustomerMaster.customerPhoto
в объекте BLOB). Я использую компонент imageBuilder (RequestScoped) для создания изображения на основе содержимого, хранящегося в CustomerMaster
, которое доступно в клиентском компоненте (ViewScoped). Я добавил свойство в ImageBuilder для доступа к объекту CustomerMaster в компоненте клиента. Также добавлены операторы sysout для целей отслеживания.
Вот вывод
09:34:22,817 INFO [stdout] (http--127.0.0.1-8080-2) getImage - 1
09:34:22,817 INFO [stdout] (http--127.0.0.1-8080-2) getImage - 3
09:34:22,817 INFO [stdout] (http--127.0.0.1-8080-2) getImage - 4
09:34:22,817 INFO [stdout] (http--127.0.0.1-8080-2) getImage - 5PhotoMaster [photoId=1, contentType=image/gif] 2064
09:34:22,817 INFO [stdout] (http--127.0.0.1-8080-2) getImage - 6
09:34:22,827 WARNING [javax.enterprise.resource.webcontainer.jsf.context] (http--127.0.0.1-8080-2) JSF1091: No mime type could be found for file dynamiccontent. To resolve this, add a mime-type mapping to the applications web.xml.
09:34:23,057 SEVERE [org.primefaces.application.PrimeResourceHandler] (http--127.0.0.1-8080-4) Error in streaming dynamic resource. Unable to set property customerBean for managed bean imageBuilderBean
Основываясь на операторах sysout, я вижу, что ImageBuilderBean может получить доступ к объекту CustomerMaster и создать DefaultStreamedContent.
Но позже я получаю следующее серьезное сообщение, и изображение не отображается на веб-странице:
09:34:23,057 SEVERE [org.primefaces.application.PrimeResourceHandler] (http--127.0.0.1-8080-4) Error in streaming dynamic resource. Unable to set property customerBean for managed bean imageBuilderBean
Если я использую Область сеанса в CustomerBean (вместо ViewScoped), все работает файл. Даже изображение отображается на веб-странице. Насколько я понимаю, не должно быть никаких проблем с вызовом компонента Viewscoped из компонента requestScoped.
Я не уверен, что не так. Пожалуйста помоги. См. код для справки.
ImageBuilder.Java
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
@ManagedBean (name="imageBuilderBean")
@RequestScoped
public class ImageBuilderBean implements Serializable {
private static final long serialVersionUID = -480089903900643650L;
@ManagedProperty(value="#{customerBean}")
private CustomerBean customerBean;
private StreamedContent image;
public ImageBuilderBean() {
super();
}
@PostConstruct
void ResetBean(){
System.out.println("getImage - 1");
FacesContext context = FacesContext.getCurrentInstance();
if (context.getRenderResponse()) {
System.out.println("getImage - 2");
// So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL.
image = new DefaultStreamedContent();
}
else {
System.out.println("getImage - 3");
CustomerMaster custMaster = customerBean.getCustMaster();
if (custMaster != null){
System.out.println("getImage - 4");
PhotoMaster photo = custMaster.getCustomerPhoto();
if (photo != null) {
try {
System.out.println("getImage - 5" + photo + " " + photo.getContent().length());
InputStream inputStream = photo.getContent().getBinaryStream();
image = new DefaultStreamedContent(inputStream, photo.getContentType());
System.out.println("getImage - 6");
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("exception Shirish");
e.printStackTrace();
}
}
}
}
}
Клиент.XHTML
<p:column>
<p:graphicImage id="custImageId" value="#{imageBuilderBean.image}" cache="false" />
</p:column>
CustomerBean.Java
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
@ManagedBean (name="customerBean")
@ViewScoped
public class CustomerBean implements Serializable {
private static final long serialVersionUID = -3727342589028832013L;
// Setters and Getters
Обновление:
Поскольку тег graphicImage преобразуется в тег <img>
html. Браузер генерирует два запроса на отображение изображения. Генерируются следующие два URL-адреса:
/proj/views/user/CustomerRegistration.xhtml
— аннотации ManagedProperty возвращают клиентские компоненты с областью видимости./proj/javax.faces.resource/dynamiccontent.xhtml
— Не удалось вернуть customerBean. Следовательно, мы видим сообщение об ошибке «Невозможно установить свойство customerBean для управляемого компонента imageBuilderBean».
Какие-либо предложения?
private StreamedContent image
? - person Akos K   schedule 05.11.2012