2017-01-28 5 views
0

埋め込みのtomcat でうまく動作するSpringboot JSFアプリケーションがありますが、EclipseのTomcatでjplコンポーネントをレンダリングしようとすると、eclipseのtomcatでspringbootアプリケーションを実行すると、JSFコンポーネントがレンダリングされない

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.springframework</groupId> 
    <artifactId>gs-accessing-data-jpa</artifactId> 
    <version>0.1.0</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.4.RELEASE</version> 
    </parent> 

    <packaging>war</packaging> 


    <properties> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 


     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency>  

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.14</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.14</version> 
     </dependency> 

     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>6.0</version> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 


     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>provided</scope> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <!-- 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      --> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <name>Spring Releases</name> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
     <repository> 
      <id>org.jboss.repository.releases</id> 
      <name>JBoss Maven Release Repository</name> 
      <url>https://repository.jboss.org/nexus/content/repositories/releases</url> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <name>Spring Releases</name> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

- メインクラス:

package hello; 

import java.util.Collections; 
import java.util.HashSet; 
import java.util.Set; 

import javax.faces.application.ProjectStage; 
import javax.servlet.ServletContainerInitializer; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.HandlesTypes; 

import org.apache.catalina.Context; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.config.CustomScopeConfigurer; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; 
import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer; 
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
import org.springframework.boot.web.servlet.ServletContextInitializer; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 
import org.springframework.context.annotation.Bean; 

import com.sun.faces.config.FacesInitializer; 

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    private static final Logger log = LoggerFactory.getLogger(Application.class); 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

    @Bean 
    public ServletContextInitializer servletContextCustomizer() { 
     return new ServletContextInitializer() { 
      @Override 
      public void onStartup(ServletContext sc) throws ServletException { 
       sc.setInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME, ProjectStage.Development.name()); 
      } 
     }; 
    } 

    @Bean 
    public static CustomScopeConfigurer customScopeConfigurer() { 
     CustomScopeConfigurer configurer = new CustomScopeConfigurer(); 
     configurer.setScopes(Collections.<String, Object>singletonMap(FacesViewScope.NAME, new FacesViewScope())); 
     return configurer; 
    } 

    @Bean 
    public EmbeddedServletContainerFactory embeddedServletContainerFactory() { 
     TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); 

     tomcat.addContextCustomizers(new TomcatContextCustomizer() { 
      @Override 
      public void customize(Context context) { 
       context.addServletContainerInitializer(new FacesInitializer(), 
         getServletContainerInitializerHandlesTypes(FacesInitializer.class)); 
       context.addWelcomeFile("index.xhtml"); 
       context.addMimeMapping("eot", "application/vnd.ms-fontobject"); 
       context.addMimeMapping("ttf", "application/x-font-ttf"); 
       context.addMimeMapping("woff", "application/x-font-woff"); 
      } 
     }); 

     return tomcat; 
    } 

    @SuppressWarnings("rawtypes") 
    private Set<Class<?>> getServletContainerInitializerHandlesTypes(
      Class<? extends ServletContainerInitializer> sciClass) { 
     HandlesTypes annotation = sciClass.getAnnotation(HandlesTypes.class); 
     if (annotation == null) { 
      return Collections.emptySet(); 
     } 

     Class[] classesArray = annotation.value(); 
     Set<Class<?>> classesSet = new HashSet<Class<?>>(classesArray.length); 
     for (Class clazz : classesArray) { 
      classesSet.add(clazz); 
     } 

     return classesSet; 
    } 

} 

他の構成:

  • JSFは
  • Mavenの依存関係が展開アセンブリに追加されたファセットをプロジェクトに追加されているサーバー上でアプリケーションを実行するときに

、私が見る実際にはすべてのエラーを得ることはありませんJSFがあったことを意味し、ログ正常に起動さ:

2017-01-28 16:04:47.145 INFO 6880 --- [ost-startStop-1] hello.Application      : Started Application in 13.522 seconds (JVM running for 19.312) 
2017-01-28 16:04:47.231 INFO 6880 --- [ost-startStop-1] j.e.resource.webcontainer.jsf.config  : Initializing Mojarra 2.2.14 (20161114-2153 unable to get svn info) for context '/spring-hibernate-jsf-web' 
2017-01-28 16:04:47.539 INFO 6880 --- [ost-startStop-1] j.e.r.webcontainer.jsf.application  : JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed. 
2017-01-28 16:04:48.557 INFO 6880 --- [ost-startStop-1] j.e.resource.webcontainer.jsf.config  : Monitoring file:/C:/Users/lenovo/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/spring-hibernate-jsf-web/WEB-INF/faces-config.xml for modifications 
2017-01-28 16:04:48.630 INFO 6880 --- [ost-startStop-1] .w.PostConstructApplicationEventListener : Running on PrimeFaces 6.0 
2017-01-28 16:04:48.790 INFO 6880 --- [   main] org.apache.coyote.ajp.AjpNioProtocol  : Starting ProtocolHandler [ajp-nio-8009] 
2017-01-28 16:04:48.799 INFO 6880 --- [   main] org.apache.catalina.startup.Catalina  : Server startup in 20021 ms 
2017-01-28 16:04:49.463 INFO 6880 --- [nio-8080-exec-2] .a.c.c.C.[.[.[/spring-hibernate-jsf-web] : Initializing Spring FrameworkServlet 'dispatcherServlet' 
2017-01-28 16:04:49.463 INFO 6880 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2017-01-28 16:04:49.511 INFO 6880 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 47 ms 

XHTMLページにアクセス

は、レンダリングされませんエラーが、JSFとprimefacesコンポーネントが存在しない、おかげでこの問題を解決する方法をアドバイスしてください。

答えて

0

私はこの問題を発見しました。埋め込み型のTomcatでjarファイルを実行していましたが、/ faces/prefixなしでxhtmlページにアクセスできましたが、eclipse tomcatではxhtmlページの前に/ faces /適切に動作するように指示します。

+0

faceサーブレットの設定と関連しているようですが、どのように設定しますか? –

+0

@Xtreme Biker、私は顔の設定をしません、springbootは自動的にそれを行います –

+0

私が知る限り、Javaの設定を使ってjsfサーブレットを宣言して設定する必要があります。スプリングブートはspring mvcを構成するのに有効です。 –

関連する問題