すげーハマった。
正確にはSpring MVCと一緒に使ったとき。
いまのところこんな感じ
- SpringApplication.runしたときに@ManagedBeanが効く設定がわからない
- なのでConverterでDIができない(DIさせるにはConverterはManagedBeanにしてconverterId指定じゃなくbinding指定する必要がある)
- Converterの登録にはfaces-config.xmlを使う
- Spring MVCとServlet 3.0 File Uploadが使えない。のでCommons FileUploadを使う。
- onStartUpメソッドが呼ばれてない
onStartupが呼ばれてないというのがクセモノで、Overrideしてるし当然よばれてるだろうと思ってたら呼ばれてなくて、commonsを使うという指定が効いてなくてハマった。
Applicationクラスはこう
@Configuration @ComponentScan @EnableAutoConfiguration public class Application extends SpringBootServletInitializer implements ServletContextAware{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } @Override public void onStartup(ServletContext servletContext) throws ServletException { System.out.println("never invoked"); } @Override public void setServletContext(ServletContext servletContext) { servletContext.setInitParameter("com.sun.faces.forceLoadConfiguration", Boolean.TRUE.toString()); servletContext.setInitParameter("primefaces.UPLOADER", "commons"); servletContext.addListener(new RequestContextListener()); } @Bean public ServletRegistrationBean facesServletRegistration() { FacesServlet servlet = new FacesServlet(); ServletRegistrationBean registration = new ServletRegistrationBean(servlet, "*.xhtml"); registration.setLoadOnStartup(1); return registration; } @Bean public ServletListenerRegistrationBean<ConfigureListener> jsfConfigureListener() { return new ServletListenerRegistrationBean<>(new ConfigureListener()); } @Bean public FilterRegistrationBean filterBean(){ FilterRegistrationBean frb = new FilterRegistrationBean(); frb.setFilter(new FileUploadFilter()); frb.addServletRegistrationBeans(facesServletRegistration()); return frb; } }
あと、faces-config.xmlをresources/META-INFに
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> <application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application> </faces-config>