2015-04-09 2 views
0

Текущие версии: JSF 2.1, RichFaces 4.5.2Как я могу обработать файл, кэшированный в управляемом компоненте?

я попал в следующую проблему: У меня есть загрузить компонент в одном из моих веб-страниц, которая собирается загружать изображения:

<h:graphicImage id="uploadedPict" value="__WHAT__?" alt="picture /> 

<rich:fileUpload id="imageStartUploadComponent" 
       fileUploadListener="#{MyBean.uploadStartImage}" 
       acceptedTypes="png,jpg" 
       immediateUpload="false"> 
    <a4j:ajax event="uploadcomplete" render="uploadedPict" /> 
</rich:fileUpload> 

и сам сведущих боб:

public class MyBean{ 

    private UploadedFile detailsImage; 

    public void uploadStartImage(){ 
     //SETTING detailsImage here 
    } 

    //GET, SET, OTHER STUFF 
} 

Я мог бы вызвать UploadedFile::getData() метод для извлечения данных бинарных изображений. Но как я могу отобразить его на веб-странице? Предполагается, что атрибут value присваивается фактическим URL-адресом изображения. Поэтому мне кажется, что мне придется написать свой собственный сервлет ...

ВОПРОС: Есть ли способ избежать написания сервлета и визуализации изображения прямо из метода управляемого компонента, возвращающего его двоичные данные?

UPDATE: Мне нужно сделать это для показа предварительного просмотра загруженного изображения. Может быть, есть еще один способ сделать это правильно?

+0

возможный дубликат [Как я могу служить бинарное содержимое из JSF/Веб-приложение?] (Http://stackoverflow.com/questions/4133982/how-can-i-serve-binary-content-from-a-jsf-webflow-app) – Kukeltje

ответ

1

Вы можете использовать <a4j:mediaOutput>:

<a4j:mediaOutput element="img" mimeType="image/jpeg" 
    createContent="#{bean.paint}" value="#{bean.file}"> 
</a4j:mediaOutput> 

и метод краски:

public void paint(OutputStream stream, Object object) throws IOException { 
    stream.write(((UploadedFile) object).getData()); 
    stream.close(); 
} 

(проверить showcase example)

+0

BTW Не работает с V iewScoped beans –

Смежные вопросы