2016-08-18 9 views
0

私は、コンソールで作られたJSF2 endを開発しようとしています。これは私のプロジェクト構成です:Springブート埋め込みtomcat - /pages/index.xhtmlリソースとしてExternalContextに見つかりません

のpom.xml

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.7.RELEASE</version> 
    <relativePath /> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <main.basedir>${basedir}/../..</main.basedir> 
    <java.version>1.8</java.version> 
    <tomcat.version>7.0.59</tomcat.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-juli</artifactId> 
     <version>${tomcat.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.googlecode.json-simple</groupId> 
     <artifactId>json-simple</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.el</groupId> 
     <artifactId>el-ri</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
     <version>3.14</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.2.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.python</groupId> 
     <artifactId>jython-standalone</artifactId> 
     <version>2.7.1b3</version> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>ConfigurationConsole</finalName> 
    <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

のfaces-config.xmlの

<application> 
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 

web.xmlの

<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>/fases/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/javax.faces.resource/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
<context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 
<context-param> 
    <description> 
     If comments are enabled, the copyright header will prevent the login form 
     from working on Internet Explorer. Alternatively, you can remove the copyright 
     header. 
    </description> 
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> 
    <param-value>com.igt.icc.configurationConsole.FaceletsResourceResolver</param-value> 
</context-param> 
<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 
<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 

春ブーツメインクラス:

@SpringBootApplication 
@EnableAutoConfiguration 
@ComponentScan 
public class ApplicationStarter extends SpringBootServletInitializer implements ServletContextAware 
{ 

/** 
* 
* @param args 
*/ 
public static void main(String[] args) { 
    SpringApplication.run(ApplicationStarter.class, args); 
    try{ 
     //JSONPropertiesManager.getInstance().loadProperties(); 
     JSONPropertiesManager.getInstance().loadJSONProperties(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

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


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


@Bean 
public ServletRegistrationBean facesServletRegistration() { 
    ServletRegistrationBean registration = new ServletRegistrationBean(facesServlet(), "*.xhtml"); 
    registration.setName("FacesServlet"); 
    return registration; 
} 


@Bean 
public ServletListenerRegistrationBean<ConfigureListener> jsfConfigureListener() { 
    return new ServletListenerRegistrationBean<ConfigureListener>(
     new ConfigureListener()); 
} 

@Override 
public void setServletContext(ServletContext servletContext) { 
    servletContext.setInitParameter("com.sun.faces.forceLoadConfiguration", Boolean.TRUE.toString());  
} 
web.xmlファイルに呼ば

}

facesResourceResolverクラス、:

public class FaceletsResourceResolver extends ResourceResolver { 

private ResourceResolver parent; 
private String basePath; 

public FaceletsResourceResolver(ResourceResolver parent) { 
    this.parent = parent; 
    this.basePath = "/META-INF/"; // TODO: Make configureable? 
} 

@Override 
public URL resolveUrl(String path) { 
    URL url = parent.resolveUrl(path); // Resolves from WAR. 

    if (url == null) { 
     url = getClass().getResource(basePath + path); // Resolves from JAR. 
    } 

    return url; 
} 

、これが私のプロジェクト構造である:NetBeansで

projectFolder 


-src 
     -main 
      -java 
      -resources 
       - here i have copyed into META-INF the *.class and /pages/*.xhtml 
      -webapp 

、正しくアプリケーションの実行を日食。しかし、私はそれを構築し、瓶を起動しようとすると、アプリケーションが正しく起動しますが、私が404を見つけられなかったページを開くと、何が間違っていましたか?

+0

あなたの 'web.xml'は何もしません。また、私は正しくJSFと春のブートを思い出すとwarファイルのためにのみ動作します。その次に、自分自身をハッキングするのではなく、JSFを自動構成してブートストラップする代わりに、[this](https://github.com/joinfaces/joinfaces)を試してみてください。 –

+0

webappの下にあるページ – Jens

+0

Jens --- springboot用のpaxkajingを使用するとwebappフォルダはapp.jarに含まれないので、unde resourcesフォルダをコピーするか、webappフォルダをresource-directoryとしてビルドに追加する必要がありますポムのセクション。 – liberosoftware

答えて

1

ソリューション

下図に示すように、フォルダ構造の下にこれに従ってください。

FolderStructure

+0

これは私の構造です...唯一の違いは、私はすべてのフォルダのブートストラップ、CSSなど... webapp /リソースの下で直接webappの下に... – liberosoftware

+0

リソースの下に移動し、warファイルとして公開している間に、spring-bootはリソースフォルダを探して知らせます。 –

+0

同じ問題... /pages/index.xhtmlリソースとしてExternalContextに見つかりません – liberosoftware

関連する問題