Jsp java.lang.RuntimeException找不到FacesContext
我不知道如何继续,但我总是为我的新JSF1.2Web应用程序获取“java.lang.RuntimeException:找不到FacesContext”。我肯定这只是一些我找不到的配置 第一个Jsp java.lang.RuntimeException找不到FacesContext,jsp,jsf,tomcat,runtimeexception,facescontext,Jsp,Jsf,Tomcat,Runtimeexception,Facescontext,我不知道如何继续,但我总是为我的新JSF1.2Web应用程序获取“java.lang.RuntimeException:找不到FacesContext”。我肯定这只是一些我找不到的配置 第一个f:或h:标记出现异常。已经在开始时使用了重要的 我的index.jsp <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" pre
f:
或h:
标记出现异常。已经在开始时使用了重要的
我的index.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<f:view>
<html>
<head>
<title>MyWebsite</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<div>MyContent</div>
</body>
</html>
</f:view>
然后我还有一个faces config.xml
,它应该引用我以后在页面主体中要使用的myBean:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
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-facesconfig_1_2.xsd">
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
<managed-bean>
<managed-bean-name>myClassName</managed-bean-name>
<managed-bean-class>
com.company.className
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
com.sun.facelets.FaceletViewHandler
我的类名
com.company.className
一场
我错过了什么
java.lang.RuntimeException:找不到FacesContext
因此,JSF
和
标记抱怨找不到FacesContext
。FacesServlet
负责创建faces上下文。当请求URL与其URL模式匹配时,就会调用faces servlet,这在您的特定情况下是*.jsf
。因此,当您以http://localhost:8080/context/index.jsp
,或者依赖于
设置,则您没有调用faces servlet,您确实会得到此异常
您需要打开index.jsp
作为http://localhost:8080/context/index.jsf
,或将欢迎文件条目设置为index.jsf
,以便正确调用Facesservlet,以便它可以创建JSP页面中声明的jsf组件所需的faces上下文
但是请注意,在这个JSF1.x+Tomcat环境中,仅修复欢迎文件是不够的。您还需要在webcontent中的index.jsp
文件旁边提供一个物理存在但完全为空的index.jsf
文件,以欺骗Tomcat,使其知道index.jsf
确实作为欢迎文件存在。否则它将显示404错误,因为它会事先检查欢迎文件的物理存在性
另见:
与具体问题无关,我想知道如果您显然已经安装了Facelets 1.x并注册了它的视图处理程序,为什么要使用JSP。Facelets与JSP相去甚远。是的,你是对的,我看到我们(在另一个web项目中)还使用了一个后缀为
.jsf
的起始页面,然后重定向到.JSP页面。无论如何,我仍然没有真正理解JSF——我已经习惯了HTML,并且希望继续使用这种语法——因为我对用户获得的代码有100%的控制权。因此,我将继续使用.jsp,而忽略jsf。简而言之:JSF不再需要自己编写所有HTML/CSS/JS(您只需了解JSF组件生成的HTML输出,以便轻松选择正确的输出),也不再需要手动收集提交的值,转换/验证它们,并将它们作为bean属性和idenfity放置,然后调用action方法。最终您将得到一个JSP文件作为“视图”,一个javabean作为“模型”。换句话说,最终得到的代码会更少,但我必须承认JSP是一种糟糕的视图技术,它让JSF1.x感到不必要的痛苦。对于开发人员,请参阅较少的代码,但浏览器必须处理生成的代码。因此,这种“更少的代码”意味着更少的控制、第三方依赖性,并最终在出现问题或定制时产生挫折感。但是非常感谢你的评论-也许我真的应该看看高级版本,比如2.X+。@FiveO生成的代码是HTML。无论是否使用JSF,浏览器都必须“处理”它。总的来说,无论是JSF、EJB、JPA等,任何框架都会给你“更少的控制”。然而,大多数时候,它们会给你一种“手动”的方式。使用JSF,您始终可以编写纯HTML/CSS/JS,或者创建自己的自定义标记/组件。您不需要第三方依赖,只需使用运行在完整Java应用程序服务器上的纯JavaEE,如Glassfish、JBoss AS或WebSphereAS。在我看来,挫折是不得不一次又一次地重新发明轮子,而不是专注于业务代码。
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
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-facesconfig_1_2.xsd">
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
<managed-bean>
<managed-bean-name>myClassName</managed-bean-name>
<managed-bean-class>
com.company.className
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>