Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp java.lang.RuntimeException找不到FacesContext_Jsp_Jsf_Tomcat_Runtimeexception_Facescontext - Fatal编程技术网

Jsp 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

我不知道如何继续,但我总是为我的新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" 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>