Загрузите файл Primfaces 6.2 с помощью Spring Boot 2.1 - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь загрузить файл с Primefaces 6.2 и Spring Boot 2.1 Я думаю, что у меня все хорошо настроено, но я не могу загрузить файл. Когда я пытаюсь загрузить файл, я вижу загрузку на странице, но в консоли у меня нет журналов, и мой отладчик не останавливается на точке останова на функции обработчика.

Моя форма .xhtml:

<h:form id="uploadForm" enctype="multipart/form-data">
        <p:fileUpload value="#{estimateState.file}" skinSimple="true" label="Wybierz plik"
                      update="growl" mode="advanced" auto="true"
                      fileUploadListener="#{estimateController.handleFileUpload}"/>
</h:form>

Обработчик файлов

public void handleFileUpload(FileUploadEvent event) {
    informationMessage(getState().getFile().getFileName() + " is uploaded.");
}

Бины, которые инициализируют PrimeFaces

@Bean
public FilterRegistrationBean primeFacesFileUploadFilter(@Autowired ServletRegistrationBean<FacesServlet> facesServletServletRegistrationBean) {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new org.primefaces.webapp.filter.FileUploadFilter());
    registration.setName("primeFacesFileUploadFilter");
    registration.setDispatcherTypes(DispatcherType.FORWARD);
    registration.setServletNames(Collections.singleton(FACES_SERVLET_NAME));
    registration.setServletRegistrationBeans(Collections.singleton(facesServletServletRegistrationBean));
    return registration;
}

@Override
public void setServletContext(ServletContext servletContext) {
    servletContext.setInitParameter("facelets.DEVELOPMENT", Boolean.TRUE.toString());

    servletContext.setInitParameter("javax.faces.DEFAULT_SUFFIX", ".xhtml");
    servletContext.setInitParameter("javax.faces.PROJECT_STAGE", "Development");
    servletContext.setInitParameter("javax.faces.FACELETS_REFRESH_PERIOD", "1");
    servletContext.setInitParameter("javax.faces.FACELETS_LIBRARIES", "/WEB-INF/springsecurity.taglib.xml");
    servletContext.setInitParameter("javax.faces.FACELETS_SKIP_COMMENTS", Boolean.TRUE.toString());

    servletContext.setInitParameter("com.sun.faces.forceLoadConfiguration", Boolean.TRUE.toString());

    servletContext.setInitParameter("primefaces.CLIENT_SIDE_VALIDATION", Boolean.TRUE.toString());
    servletContext.setInitParameter("primefaces.THEME", "ui-lightness");
    servletContext.setInitParameter("primefaces.UPLOADER", "commons");
    servletContext.setInitParameter("primefaces.MOVE_SCRIPTS_TO_BOTTOM", Boolean.TRUE.toString());
}

@Bean
public ServletRegistrationBean<FacesServlet> facesServletServletRegistrationBean() {
    ServletRegistrationBean<FacesServlet> servletRegistrationBean = new ServletRegistrationBean(new FacesServlet(), "*.xhtml");
    servletRegistrationBean.setLoadOnStartup(1);
    servletRegistrationBean.setName(FACES_SERVLET_NAME);
    return servletRegistrationBean;
}

Я также добавил зависимости общего достояния в мой файл pom.xml

<dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>

Пожалуйста, помогите мне! Заранее спасибо :)

Я получаю что-то вроде этого:

1 Ответ

1 голос
/ 11 марта 2019

У меня было что-то не так с моими компонентами конфигурации Ниже правильно настроены bean-компоненты:

 @Bean
public FilterRegistrationBean primeFacesFileUploadFilter(@Autowired ServletRegistrationBean<FacesServlet> facesServletServletRegistrationBean) {
    FilterRegistrationBean registration = new FilterRegistrationBean(new org.primefaces.webapp.filter.FileUploadFilter(), facesServletServletRegistrationBean);
    registration.setName("primeFacesFileUploadFilter");
    registration.addUrlPatterns("/*");
    registration.setDispatcherTypes(DispatcherType.FORWARD, DispatcherType.REQUEST);
    return registration;
}

@Bean
public FacesServlet facesServlet() {
    return new FacesServlet();
}

@Bean
public ServletRegistrationBean<FacesServlet> facesServletServletRegistrationBean(@Autowired FacesServlet facesServlet) {
    ServletRegistrationBean<FacesServlet> servletRegistrationBean = new ServletRegistrationBean(facesServlet, "*.xhtml");
    servletRegistrationBean.setLoadOnStartup(1);
    servletRegistrationBean.setName(FACES_SERVLET_NAME);
    return servletRegistrationBean;
}

Мне нужно было добавить bean-компонент FaceServlet, и я использовал конструктор с двумя аргументами в FilterRegistrationBean. Также я удалил эту строку

registration.setServletRegistrationBeans(Collections.singleton(facesServletServletRegistrationBean));

...