5

続行する方法がわかりませんが、新しい JSF 1.2 Web アプリケーションで常に「java.lang.RuntimeException: Cannot find FacesContext」が発生します。私が見つけられないのは、単なる構成だと確信しています。

f:最初のまたはh:タグで例外が発生します。<f:view>冒頭ですでに重要です。

じぶんの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>

web.xmlはこのように見えます:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jsp</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>720</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

そして、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>

ここで何が欠けていますか?

4

1 に答える 1

8

java.lang.RuntimeException: Cannot find FacesContext

したがって、JSF<f:xxx><h:xxx>タグがFacesContext見つからないと不平を言っています。はFacesServlet、面のコンテキストを作成する役割を果たします。リクエスト URL がその URL パターンに一致すると、faces サーブレットが呼び出されます*.jsf。したがって、index.jspasを開くhttp://localhost:8080/context/index.jspか、設定に依存している<welcome-file>場合、faces サーブレットを呼び出していないため、実際にこの例外が発生します。

faces サーブレットを適切に呼び出すには、 index.jspasを開くhttp://localhost:8080/context/index.jsfか、welcome ファイルのエントリを に設定する必要があります。これにより、JSP ページで宣言された JSF コンポーネントが必要とする faces コンテキストを作成できます。index.jsf

ただし、この JSF 1.x + Tomcat 環境では、ウェルカム ファイルを修正するだけでは不十分であることに注意してください。また、実際にウェルカム ファイルとして存在するTomcat をだますために、Web コンテンツ内index.jsfのファイルの隣に、物理的に存在するが完全に空のファイルを提供する必要があります。それ以外の場合は、事前にウェルカム ファイルの物理的な存在をチェックするため、404 エラーが表示されます。index.jspindex.jsf

以下も参照してください。


具体的な問題とは関係ありませんが、どうやら Facelets 1.x をインストールしてそのビュー ハンドラーを登録しているのに、なぜ JSP を使用しているのか疑問に思っています。Facelets はJSPよりもはるかに優れています。

于 2013-05-03T11:30:12.513 に答える