本文介绍了Google App Engine不会解析JSF 2.0标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我在AppEngine上运行JSF 2.0时遇到问题。我有以下 index.xhtml ,如果我部署它并打开页面,除了标题以外,该页面的源代码完全是与写入相同 - 从< h:head> 到< head> 无论如何都没有变化。 p> index.xhtml <!DOCTYPE html> < html xmlns =http://www.w3.org/1999/xhtml xmlns:f =http://java.sun.com/jsf/core xmlns:h =http://java.sun.com/jsf/html> < h:头> < title>标题< / title> < / h:头> < h:body> < h:inputText value =Text/> < / h:body> < / html> appengine-web.xml <?xml version =1.0encoding =utf- 8\" >?; < appengine-web-app xmlns =http://appengine.google.com/ns/1.0> < application> app< / application> < version> 1< / version> <会话启用>真实< /会话启用> <! - 配置java.util.logging - > < system-properties> < property name =java.util.logging.config.filevalue =WEB-INF / logging.properties/> < / system-properties> < / appengine-web-app> web.xml <?xml version =1.0encoding =utf-8 ?> < web-app xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance xmlns =http://java.sun.com/xml/ns / javaee xmlns:web =http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd xsi:schemaLocation =http://java.sun .com / xml / ns / javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd version =2.5> < display-name>任务管理器< / display-name> < description>内部任务管理器< / description> 至少对于JSF 2.0.1 - > < context-param> < param-name> javax.faces.STATE_SAVING_METHOD< / param-name> < param-value>客户端< /参数值> < / context-param> < context-param> < param-name> javax.faces.PROJECT_STAGE< / param-name> <参数值>生产< /参数值> < / 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< /参数值> < / context-param> < servlet> < servlet-name> Faces Servlet< / servlet-name> < servlet-class> javax.faces.webapp.FacesServlet< / servlet-class> 1< / load-on-startup> < / servlet> < servlet-mapping> < servlet-name> Faces Servlet< / servlet-name> < url-pattern> / faces / *< / url-pattern> < / servlet-mapping> < session-config> < session-timeout> 30< / session-timeout> < / session-config> < welcome-file-list> < welcome-file> index.xhtml< / welcome-file> < / welcome-file-list> < / web-app> 更改后的Stacktrace W 2011-06-25 03:13:11.763 EXCEPTION java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet 。在在在org.mortbay.util java.lang.ClassLoader.loadClass(ClassLoader.java:266) com.google.appengine.runtime.Request.process-32c47fe3ad43decc(Request.java)。 Loader.loadClass(Loader.java:91) at org.mortbay.util.Loader.loadClass(Loader.java:71) at org.mortbay.jetty.servlet.Holder.doStart(Holder。 java:73) at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)。在org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)在org.mortbay.jetty.servlet.Context.startContext(Context.java:140)。在组织.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) at org.mortbay.jetty.handler.ContextHandler.d oStart(ContextHandler.java:517) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 50)在com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)在com.google.net.rpc.impl.Server $ RpcTask.runInContext(服务器。 Java的:573)在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:448)在com.google.tracing.TraceContext.runInContext(TraceContext.java:688) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:446)$ java.util.concurrent.ThreadPoolExecutor.runWorker中的(ThreadPoolExecutor.java:1110)$ java.util.concurrent中的。的ThreadPoolExecutor $ Worker.run(ThreadPoolExecuto r.java:603)在java.lang.Thread.run(Thread.java:636) E 2011-06-25 03:13:11.766 javax。 servlet.ServletContext日志:不可用 javax.servlet.UnavailableException:javax.faces.webapp.FacesServlet at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79)在org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty .servlet.ServletHandler.initialize(ServletHandler.java:685) at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) at org.mortbay.jetty.webapp.WebAppContext .startContext(WebAppContext.java:1250) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext .java:467) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.creat eHandler(AppVersionHandlerMap.java:202),位于com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171)位于com.google.apphosting.runtime.jetty.JettyServletEngineAdapter。 serviceRequest(JettyServletEngineAdapter.java:123),位于com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)位于com.google.apphosting.base.RuntimePb $ EvaluationRuntime $ 2.handleRequest (RuntimePb.java:9673),位于com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)位于com.google.net.rpc.impl.Server $ RpcTask .runInContext(Server.java:573)在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:448)在com.google.tracing.TraceContext.runInContext(TraceContext。 at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext。 java:318) at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:446) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)$ b $ at java.lang.Thread.run(Thread.java:636) W 2011 -06-25 03:13:11.768 上下文启动失败com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@11d2066 {/,/ base / data / home / apps / s〜cse-info / 1.351380543505614038} java.lang.NullPointerException $ b $ java.lang.Class.isAssignableFrom(Native Method) at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) at org.mortbay .jetty.servlet.Context.startContext(Context.java:140) at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext .java:1250) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467 ) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:202) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)在com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)在com.google.apphosting.base.RuntimePb $ EvaluationRuntime $ 2.handleRequest(RuntimePb.java:9673) com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422) com.google.net.rpc.impl.Server $ RpcTask.runInContext(Server.java:573),位于com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run( TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java:688) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:446)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)$ b $在java.lang.Thread .run(Thread.java:636) C 2011-06-25 03:13:11.775 从servlet未捕获的异常 javax.servlet.UnavailableException:初始化失败。 at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:211) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)在com.google.apphosting.base.RuntimePb $ EvaluationRuntime $ 2.handleRequest(RuntimePb.java:9673)在com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)。在com.google.net.rpc.impl.Server $ RpcTask.runInContext(Server.java:573)在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java:688) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326) at com .google.tracing.TraceCo ntext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318) at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:446) at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1110)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:603)在java.lang.Thread.run(Thread.java:636) 解决方案如果请求没有被Faces Servlet处理,并不是专门针对GAE的。 您曾使用过哪些网址来访问您的网页?由于您声明了前缀映射,因此您必须在您的网址中插入/ faces /,例如my.appspot.com/faces/mypage.xhtml。 我会推荐使用后缀映射并使用.xhtml: < servlet-mapping> < servlet-name> facesServlet< / servlet-name> < url-pattern> *。xhtml< / url-pattern> < / servlet-mapping> I have a problem with running JSF 2.0 on AppEngine. I have following index.xhtml and if I deploy it and open the page, there is nothing but the Title and the page's source code is completely the same as it was written - no changes from <h:head> to <head> whatsoever.index.xhtml<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"><h:head> <title>Title</title></h:head><h:body> <h:inputText value="Text"/></h:body></html>appengine-web.xml<?xml version="1.0" encoding="utf-8"?><appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>app</application> <version>1</version> <sessions-enabled>true</sessions-enabled> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties> </appengine-web-app>web.xml<?xml version="1.0" encoding="utf-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><display-name>Task Manager</display-name><description>Internal task manager</description><!-- Seems like GAE 1.2.6 cannot handle server side session management. At least for JSF 2.0.1 --><context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value></context-param><!-- Recommendation from GAE pages --><context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Production</param-value></context-param><context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value></context-param><!-- ***** Accommodate Single-Threaded Requirement of Google AppEngine --><context-param> <param-name>com.sun.faces.enableThreading</param-name> <param-value>false</param-value></context-param><!-- ***** Load the JavaServer 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><servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern></servlet-mapping><!-- ***** Specify session timeout of thirty (30) minutes. ***** --><session-config> <session-timeout>30</session-timeout></session-config><welcome-file-list> <welcome-file>index.xhtml</welcome-file></welcome-file-list></web-app>Stacktrace after the changeW 2011-06-25 03:13:11.763EXCEPTION java.lang.ClassNotFoundException: javax.faces.webapp.FacesServletat com.google.appengine.runtime.Request.process-32c47fe3ad43decc(Request.java)at java.lang.ClassLoader.loadClass(ClassLoader.java:266)at org.mortbay.util.Loader.loadClass(Loader.java:91)at org.mortbay.util.Loader.loadClass(Loader.java:71)at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:636)E 2011-06-25 03:13:11.766javax.servlet.ServletContext log: unavailablejavax.servlet.UnavailableException: javax.faces.webapp.FacesServletat org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79)at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:202)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171)at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)at com.google.apphosting.base.RuntimePb$EvaluationRuntime$2.handleRequest(RuntimePb.java:9673)at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:636)W 2011-06-25 03:13:11.768Failed startup of context com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@11d2066{/,/base/data/home/apps/s~cse-info/1.351380543505614038}java.lang.NullPointerExceptionat java.lang.Class.isAssignableFrom(Native Method)at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:202)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171)at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)at com.google.apphosting.base.RuntimePb$EvaluationRuntime$2.handleRequest(RuntimePb.java:9673)at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:636)C 2011-06-25 03:13:11.775Uncaught exception from servletjavax.servlet.UnavailableException: Initialization failed.at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:211)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171)at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)at com.google.apphosting.base.RuntimePb$EvaluationRuntime$2.handleRequest(RuntimePb.java:9673)at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:636) 解决方案 This typically happens if a request is not handled by the Faces Servlet and has is not specifically about GAE.What URL did you used to access your page? Since you declared a prefix mapping, you have to insert /faces/ into your URLs, e.g. my.appspot.com/faces/mypage.xhtml.I would recommend going for suffix mapping and using .xhtml exclusively:<servlet-mapping> <servlet-name>facesServlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> 这篇关于Google App Engine不会解析JSF 2.0标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-11 14:23