2013-08-14 3 views
0

Я пытаюсь загрузить текстовый документ на свой сервер, и это заставляет меня сходить с ума на пару дней. В принципе, метод, который предполагается уволить # {bookController.handleFileUpload}, когда файл загружен, не срабатывает, но я не получаю никаких ошибок, а на переднем конце файл выглядит так, как будто он загружен. Я предполагаю, что файл будет потребляться где-то на пути к моему методу контроллера. Вот мой web.xmlзагрузка файла java/jsf/primefaces

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class> 
     org.primefaces.webapp.filter.FileUploadFilter 
    </filter-class> 
</filter> 
    <filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 
    <context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>south-street</param-value> 
    </context-param> 
    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/jpmorgan/*</url-pattern> 
    </servlet-mapping> 
    <context-param> 

Я добавил необходимые банки (общий io.jar & общего fileupload.jar) к моей pom.xml. Вот моя страница, предположим, для обработки файла:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" 
    template="/WEB-INF/layouts/no-ajax.xhtml"> 

    <ui:define name="head"> 

    </ui:define> 

    <ui:define name="title">#{msg['add_book']}</ui:define> 

    <ui:define name="content"> 
     <h:form id="form" enctype="multipart/form-data"> 

      <p:messages id="messages" autoUpdate="true"/> 
      <p:panelGrid id="grid"> 

      <p:row> <p:column> 
       <h:outputLabel for="name" value="#{msg['label_book_title']}" /> 
       <p:spacer width="100" height="10" /> 
       <p:inputText id="name" value="#{bookBean.book.title}"/> 
      </p:column> </p:row>  
      <p:row> <p:column> 

       <p:fileUpload id="upload" value="#{bookBean.file}" 
           dragDropSupport="true" 
           update="messages" 
           fileUploadListener="#{bookController.handleFileUpload}" /> 

      </p:column> </p:row> 
      </p:panelGrid> 

      <p:toolbar> 
       <p:toolbarGroup align="left"> 
        <p:commandButton value="#{msg['button_next']}" action="next" execute="@form" update="@form"/> 
        <p:commandButton value="#{msg['button_cancel']}" action="exit" execute="@form" update="@form"/> 
       </p:toolbarGroup> 
      </p:toolbar> 

     </h:form> 
    </ui:define> 

    <ui:define name="help"> 

    <h:outputText value="#{msg['help_add_page']}" /> 

    </ui:define> 

</ui:composition> 

и макет для вышеуказанной страницы:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:sec="http://www.springframework.org/security/tags" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

<f:view contentType="text/html"> 

    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>#{msg['application_name']}</title> 

     <link rel="icon" href="resources/resources/images/favicon.ico" type="image/x-icon" /> 
     <link rel="shortcut icon" href="resources/resources/images/favicon.ico" /> 
     <link rel="stylesheet" href="resources/resources/styles/blueprint/screen.css" type="text/css" media="screen, projection" /> 
     <link rel="stylesheet" href="resources/resources/styles/blueprint/print.css" type="text/css" media="print" /> 
     <!--[if lt IE 8]> 
      <link rel="stylesheet" href="${request.servletPath}/styles/blueprint/ie.css" type="text/css" media="screen, projection" /> 
     <![endif]--> 
    </h:head> 

    <h:body> 
     <p:layout fullPage="true"> 

      <p:layoutUnit id="top" position="north" header="#{msg['application_name']}" size="100" collapsible="true" collapsed="false" resizable="true"> 
       <ui:insert name="title" /> 
      </p:layoutUnit> 

      <p:layoutUnit id="west" position="west" size="250" header="#{msg['label_help']}" resizable="true" collapsible="true" collapsed="false"> 
       <ui:insert name="help" /> 
      </p:layoutUnit> 

      <p:layoutUnit id="center" position="center" > 
       <ui:insert name="content" /> 
      </p:layoutUnit> 

     </p:layout> 

    </h:body> 

</f:view> 
</html> 

Кто-нибудь есть идея, что я делаю не так? Большое спасибо.

+0

Привет, BalusC, мне удалось запустить код в разных проектах, но как только он переместится на мой, это не сработает. Есть несколько примеров, но разница с моей, что я использую больше конфигурации в web.xml. Я также попытался сделать это проще в моем проекте без layout.xhtml и формы, содержащей только элемент upload, но он все равно не работает. – Lukasz

+0

Я уверен, что проблема кроется не в кодировке, а в части конфигурации (web.xml) – Lukasz

ответ

0

Я думаю, что проблема в вашем <p:commandButton value="#{msg['button_next']}" action="next" execute="@form" update="@form"/>. Загрузка файла с использованием AJAX невозможна, поэтому вам нужно добавить ajax="false" в ваш p:commandButton, и, возможно, вам нужно использовать actionListener вместо действия, но на lattern я не уверен. Вы должны попробовать попробовать образец от https://www.primefaces.org/showcase/ui/file/upload/single.xhtml в вашем контексте.

1

Ваш код, кажется, правильно я имел такую ​​же проблему, вы должны работать с JSF 2.2 и Primefaces 5.3

мой код для загрузки составляет

public void uploadPhoto(FileUploadEvent e) throws IOException { 

    UploadedFile uploadedPhoto = e.getFile(); 

    String filePath = "TO/THE/PATH"; 
    byte[] bytes = null; 

    if (null != uploadedPhoto) { 
     bytes = uploadedPhoto.getContents(); 
     String filename = FilenameUtils 
       .getName(uploadedPhoto.getFileName()); 
     BufferedOutputStream stream = new BufferedOutputStream(
       new FileOutputStream(new File(filePath + filename))); 
     stream.write(bytes); 
     stream.close(); 
    } 
    setProduitIMG(uploadedPhoto.getFileName()); 
    setImageSize(uploadedPhoto.getSize()); 

    FacesContext.getCurrentInstance().addMessage(
      "messages", 
      new FacesMessage(FacesMessage.SEVERITY_INFO, 
        "Your Photo (File Name " + uploadedPhoto.getFileName() 
          + " with size " + uploadedPhoto.getSize() 
          + ") Uploaded Successfully", "")); 
} 

вы можете использовать его в управляемом компоненте с вам не нужно создавать новый файлBean, который вы можете объединить с любым управляемым классом. Он отлично работает.

JSF 2.1 OR 2.0 не работает в этом случае с интеграцией с весной, вам нужно обновить свой проект, и он будет работать нормально

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