2013-10-27 36 views
1

我想在應用程序引擎開發服務器上爲jsf運行一個maven項目,並且爲每個託管bean都收到一個404錯誤(未找到)。我編輯了http://www.mkyong.com/jsf2/jsf-2-0-hello-world-example/中的文件來與GAE一起工作。下面是修改過的文件:Maven + JSF 2 + Google AppEngine:404錯誤

HelloBean.java

package com.mkyong.common; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import java.io.Serializable; 

@ManagedBean 
@RequestScoped 
public class HelloBean implements Serializable { 
public String getName() { 
    return "abc"; 
} 
} 

的web.xml

<?xml version="1.0" encoding="utf-8"?> 
<web-app 
version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<context-param> 
    <param-name>com.sun.faces.enableThreading</param-name> 
    <param-value>false</param-value> 
</context-param> 

<!-- Faces Servlet --> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<!-- Faces Servlet Mapping --> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

<!-- Welcome page --> 
<welcome-file-list> 
    <welcome-file>index.jsf</welcome-file> 
</welcome-file-list> 
</web-app> 

的index.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html"> 

    <h:head> 
<title>JSF 2.0 Hello World</title> 
</h:head> 
<h:body bgcolor="white"> 
<h3>JSF 2.0 Hello World Example - welcome.xhtml</h3> 
<h4>Welcome #{helloBean.name}</h4> 
</h:body> 
</html> 

和pom.xml的

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.mkyong.common</groupId> 
<artifactId>JavaServerFaces</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>JavaServerFaces Maven Webapp</name> 
<url>http://maven.apache.org</url> 

<dependencies> 
<!-- Google AppEngine --> 
    <dependency> 
    <groupId>com.google.appengine</groupId> 
    <artifactId>appengine-api-1.0-sdk</artifactId> 
    <version>1.8.5</version> 
    </dependency> 
    <!-- Servlet dependency --> 
    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
    </dependency> 
    <!-- JSF --> 
    <dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-api</artifactId> 
    <version>2.2.4</version> 
    </dependency> 
    <dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>2.2.4</version> 
    </dependency>  
</dependencies> 

<build> 
    <finalName>JavaServerFaces</finalName> 

    <plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
    <source>1.7</source> 
    <target>1.7</target> 
    </configuration> 
    </plugin> 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
    <archiveClasses>true</archiveClasses> 
    <webResources> 
     <resource> 
     <directory>${basedir}/src/main/webapp/WEB-INF</directory> 
     <filtering>true</filtering> 
     <targetPath>WEB-INF</targetPath> 
     </resource> 
    </webResources> 
    </configuration> 
    </plugin> 

    <plugin> 
    <groupId>com.google.appengine</groupId> 
    <artifactId>appengine-maven-plugin</artifactId> 
    <version>1.8.5</version> 
    <configuration> 
    <disableUpdateCheck>true</disableUpdateCheck> 
    </configuration> 
    </plugin> 
    </plugins> 
</build> 
</project> 

其他文件:appengine-web.xml和logging.properties不會更改。

出了什麼問題? JSF依賴/配置?

回答

2

您使用JSF 2.2.4,但你要求使用JSF 2.0,用在這裏你剛纔複製您的hello world例子/從教程標題JSF 2.0的Hello World粘貼指出。請注意,JSF 2.2至少需要Servlet 3.0 API才能工作,但您需要使用Servlet 2.5 API(在您的maven pom中註明)。你有兩種方法可以解決這個問題:

  • 將JSF降級到2.0。我不會推薦這樣做,但會解決問題。
  • 將您的servlet API升級到3.0。請注意,這取決於GAE支持的servlet版本。
+0

對於第一個選項,我需要更改jsf-api.jar中的類(請參閱http://www.mkyong.com/google-app-engine/google-app-engine-jsf-2-例)。第二種選擇在GAE(https://code.google.com/p/googleappengine/issues/detail?id=3091)中不可行。在GAE中似乎沒有使用JSF 2.2的解決方案。 – octavian1001

+0

@ octavian1001看起來像你不能那麼。所以請繼續使用JSF 2.0。 –