gpt4 book ai didi

jsp - javax.faces.FacesException : java. lang.RuntimeException: 找不到 FacesContext

转载 作者:行者123 更新时间:2023-12-04 06:39:07 24 4
gpt4 key购买 nike

我正在尝试一个简单的项目来处理 jboss,但我遇到了这个错误(我已经尝试在 URL 上使用 .jsf)。 tomcat中的应用工作正常

javax.servlet.ServletException: java.lang.RuntimeException: Cannot find FacesContext
javax.faces.webapp.FacesServlet.service

root cause

javax.faces.FacesException: java.lang.RuntimeException: Cannot find FacesContext
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425)
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96

我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

<servlet>
<servlet-name>javax.faces.FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>javax.faces.FacesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<filter>
<filter-name>faces-redirect-filter</filter-name>
<filter-class>core.FacesRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>faces-redirect-filter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

人脸配置 xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
<managed-bean>
<managed-bean-name>resumeBean</managed-bean-name>
<managed-bean-class>core.ResumeBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>colorBean</managed-bean-name>
<managed-bean-class>core.ColorBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/customize.jsp</from-view-id>
<navigation-case>
<from-outcome>same-color</from-outcome>
<to-view-id>/WEB-INF/results/same-color.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/WEB-INF/results/show-preview.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/customize-bg.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/WEB-INF/results/show-preview2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>

最佳答案

javax.faces.FacesException: java.lang.RuntimeException: Cannot find FacesContext



JSP 页面中的 JSF 组件提示 FacesContext找不到。负责创建这个的人是 FacesServlet .

这里,
<servlet-mapping>
<servlet-name>javax.faces.FacesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>

您已声明 FacesServlet收听 url-pattern*.faces .所以,要得到 FacesServlet要运行(并创建 FacesContext),您需要确保请求 URL 匹配 http://example.com/context/page.faces因此不是 http://example.com/context/page.jsp .

如果您更愿意使用 http://example.com/context/page.jsf ,那么您需要更改 url-patternFacesServlet*.jsf .

也就是说, FacesRedirectFilter也很可疑。是不是重定向 *.jsp*.jsf或者?如果是这样,那么您还需要修改该过滤器。但是,如果唯一的目的是阻止用户访问 *.jsp直接文件,无需 FacesServlet ,然后最好将以下安全约束添加到 web.xml :
<security-constraint>
<display-name>Restrict direct access to JSP files</display-name>
<web-resource-collection>
<web-resource-name>JSP files</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>

(并删除 Filter )。

与问题无关,您提到了 JSF 1.2,但您已声明您的 faces-config.xml作为 JSF 1.1。任何 JSF 1.2 实现或更新版本都将回退到 JSF 1.1 兼容性。您还需要将其声明为 JSF 1.2。
<faces-config version="1.2" 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
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-facesconfig_1_2.xsd">

(并摆脱那个 DOCTYPE )

关于jsp - javax.faces.FacesException : java. lang.RuntimeException: 找不到 FacesContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com