文件扩展名为“JSF ServletException”时的JSF ServletException;。jsf";但作为“一个”;。xhtml";
只要我尝试通过“http://localhost:8080/初学者/faces/index.jsf”打开index.xhtml,我就会得到以下异常:文件扩展名为“JSF ServletException”时的JSF ServletException;。jsf";但作为“一个”;。xhtml";,jsf,facelets,servletexception,Jsf,Facelets,Servletexception,只要我尝试通过“http://localhost:8080/初学者/faces/index.jsf”打开index.xhtml,我就会得到以下异常: javax.servlet.ServletException javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPro
javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
java.lang.NullPointerException
com.sun.faces.renderkit.RenderKitImpl.createResponseWriter(RenderKitImpl.java:228)
com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:214)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
note The full stack trace of the root cause is available in the JBoss Web/7.0.13.Final logs.
在eclipse中,我通过“NewMaven项目向导”创建了一个Maven项目,并选择了
组Id:“org.jboss.spec.archetype”,工件Id“jboss-javaee6-webapp-blank-archetype”版本:7.13
我正在使用JBoss7.1.1.FINAL,并尝试了JDK6和JDK7
index.xthml如下所示:
<?xml version="1.0" encoding= "UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>First JSF</title>
</h:head>
<h:body>
<h1>Hello there</h1>
</h:body>
</html>
第一个JSF
你好
我找了好几个小时是有原因的,但找不到任何解决方案,即使我完成了这本工作坊书让我做的每一步。它真的是一个XHTML(Facelets)文件吗
仔细查看堆栈跟踪的下一行中的类名,了解谁在处理视图:
com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:214)
嘿,它被视为一个JSP文件!这里肯定有点不对劲。如果它真的被当作Facelets文件来处理,那么这里就应该有一个FaceletViewHandlingStrategy
让我们回顾一下URL:
http://localhost:8080/beginner/faces/index.jsf
嗯?它包含2(两!)个典型的FacesServlet
URL映射模式!/faces/*
和*.jsf
。如果您已经在webapp的web.xml
中注册了JSF的内部代码(就像许多质量差的在线教程和代码样本一样),那么很有可能会导致JSF内部代码出现一些混乱。如果找不到物理Facelets文件,则默认情况下会返回到JSP。如果匹配了/faces/*
映射,那么JSF将假定/index.JSF
是物理文件。然而,它显然不是。它应该是/index.xhtml
您是如何通过双重映射找到该URL的?你正在读的教程真的是这样教你的吗?难道你不应该改为使用
http://localhost:8080/beginner/index.jsf
或
?
请注意,/faces
在这种特定情况下应该是一个虚拟URL,而不是项目结构的web内容中的实际文件夹
无论如何。。。这些URL映射模式是遗留的JSF1.x时代遗留下来的。自JSF2.0以来,可以直接在*.xhtml
上映射FacesServlet
,而不必与虚拟URL混淆
如果可以的话,去掉所有其他的
和
,这样你最终会得到FacesServlet
:
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
与部署中的实际路径完全相同。很简单
另见:
- ,以正确的方式开始使用JSF
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
http://localhost:8080/beginner/index.xhtml