2012-05-25 3 views
0

Я использую myfaces ExtensionFilter для загрузки файла, но файл не получает его в качестве компонента для дальнейшей обработки.t: inputFileUpload не загружая файл

Вот код:

<h:form id="uploadFileForm" enctype="multipart/form-data"> 
    <tom:inputFileUpload id="file" 
     value="#{paramUpload.uploadFile}"> 
     <f:valueChangeListener type="com.bosch.de.plcd.plugin.ParamFileUpload" /> 
    </tom:inputFileUpload> 
    <a4j:commandButton value="#{tpMsgs.upload}" 
     styleClass="button" action="#{paramUpload.uploadParamFile}" 
     onclick="javascript:updateParentScreen();"> 
    </a4j:commandButton> 
</h:form> 

и конфигурации web.xml, как показано ниже

<filter> 
    <filter-name>Extensions Filter</filter-name> 
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>Extensions Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

Поскольку UploadFile не был установлен в боб, я также попытался с помощью ValueChangeListener, никогда не менее, его не себе, чтобы фасоль :)

код Bean

public class ParamFileUpload implements ValueChangeListener { 

    private UploadedFile uploadFile; 

    public void uploadParamFile() { 
     if(uploadFile != null) { 
      LOGGER.info("File type: " + uploadFile.getContentType()); 
      LOGGER.info("File name: " + uploadFile.getName()); 
      LOGGER.info("File size: " + uploadFile.getSize() + " bytes"); 
     } 
    } 

    public UploadedFile getUploadFile() { 
     return uploadFile; 
    } 

    public void setUploadFile(UploadedFile uploadFile) { 
     this.uploadFile = (UploadedFile)uploadFile; 
    } 

    public void processValueChange(ValueChangeEvent event) 
     throws AbortProcessingException { 
     this.uploadFile = (UploadedFile) event.getNewValue(); 
    } 
} 

Видите ли вы какую-либо другую конфигурацию, которую мне здесь не хватает?

+0

Вы пытались использовать компонент тегов rich: fileUpload? Из RichFaces? или почему вы не хотите его использовать? Кроме того, какие версии JSF, RF и Tomahawk вы используете? –

+0

Да, я пробовал, но поскольку я также использую внешний JQuery, richfaces fileUpload не вел себя так, как ожидалось. Так что нужно было реализовать как Satya

ответ

3

Невозможно загрузить файлы с помощью ajax с текущей версией JSF и Tomahawk. Запросы Ajax, созданные JSF, не поддерживают и не используют multipart/form-data. Tomahawk не является библиотекой компонентов на основе ajax. Вместо этого используйте обычную командную кнопку.

<h:commandButton value="#{tpMsgs.upload}" 
    styleClass="button" action="#{paramUpload.uploadParamFile}" 
    onclick="javascript:updateParentScreen();"> 
</h:commandButton> 

Поддержка загрузки файлов с помощью AJAX является scheduled для предстоящего JSF 2.2 с новым <h:inputFile> компонентом.

В качестве альтернативы вы можете использовать собственный RichFaces <rich:fileUpload>. В зависимости от используемой версии RichFaces для обеспечения асинхронной загрузки файлов используется Flash или фрейм iframe под обложками.

+0

Компонент Richfaces не работал должным образом с использованием внешнего плагина jQuery. Так что пришлось так поступать. Но теперь он отлично работает :) – Satya

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