spring-boot - Primfaces 6.2 使用 Spring Boot 2.1 上传文件
问题描述
我正在尝试使用 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
@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>
请帮我!提前致谢 :)
解决方案
我的配置 bean 有问题下面正确配置的 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;
}
我需要添加 facesServlet bean,并且在 FilterRegistrationBean 中使用了两个参数构造函数。我也删除了这一行
registration.setServletRegistrationBeans(Collections.singleton(facesServletServletRegistrationBean));
推荐阅读
- python - 如何获取输入数据并打印以预编码 HTML 格式格式化的输入
- react-native - 使用基于表单的身份验证 (FBA) 对连接到 SharePoint 2013 的移动应用程序用户进行身份验证
- python - 如何从另一个函数进行异步函数调用?
- c++ - 在另一个字符串中的文件扩展名之前插入字符串
- c - 如何创建 Posix 共享内存以使用整数
- macros - lisp:何时使用函数与宏
- c# - Sense/Net7 中缺少文件“删除”选项
- python - 如何在 kd-tree 实现中包含同一分割线上的一个点
- excel - 使用 vba 生成 n 个不重复的随机数
- pyspark - spark.read.format('libsvm')不适用于python