Pertanyaan java.lang.RuntimeException Tidak dapat menemukan FacesContext


Saya tidak tahu cara melanjutkan, tetapi saya selalu mendapatkan "java.lang.RuntimeException: Tidak dapat menemukan FacesContext" untuk aplikasi web JSF 1.2 baru saya. Saya yakin itu hanya beberapa konfigurasi yang tidak dapat saya temukan.

Pengecualian terjadi dengan yang pertama f: atau h: menandai. Sudah dengan yang penting <f:view> pada awalnya.

Saya 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>

Saya web.xml terlihat seperti ini:

<?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>

Dan kemudian saya juga punya faces-config.xml yang harus mereferensikan myBean yang ingin saya gunakan sesudahnya di badan halaman:

<?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>

Apa yang kulewatkan di sini?


5
2018-05-03 08:03


asal


Jawaban:


java.lang.RuntimeException: Cannot find FacesContext

Dengan demikian, JSF <f:xxx> dan <h:xxx> tag mengeluh itu FacesContext tidak dapat ditemukan. Itu FacesServlet adalah orang yang bertanggung jawab untuk menciptakan konteks wajah. Servlet wajah dipanggil ketika URL permintaan mencocokkan pola URL-nya, yang dalam kasus khusus Anda *.jsf. Jadi, ketika Anda membuka index.jsp sebagai http://localhost:8080/context/index.jsp, atau bergantung pada <welcome-file> pengaturan, maka Anda tidak memohon servlet wajah dan Anda memang akan mendapatkan pengecualian ini.

Anda perlu membuka index.jsp sebagai http://localhost:8080/context/index.jsf, atau untuk mengatur entri file sambutan ke index.jsf untuk benar memanggil servlet wajah, sehingga dapat menciptakan konteks wajah yang diperlukan oleh komponen JSF dideklarasikan di halaman JSP.

Namun perlu dicatat bahwa hanya memperbaiki file sambutan tidak cukup di lingkungan JSF 1.x + Tomcat ini. Anda juga perlu menyediakan yang ada secara fisik, tetapi benar-benar kosong index.jsf file di sebelah index.jsp file di konten web untuk menipu Tomcat itu index.jsf benar-benar ada sebagai file selamat datang. Jika tidak, akan menunjukkan kesalahan 404 karena memeriksa keberadaan fisik dari file sambutan sebelumnya.

Lihat juga:


Tidak terkait untuk masalah konkret, saya bertanya-tanya mengapa Anda menggunakan JSP jika Anda tampaknya telah menginstal Facelets 1.x dan mendaftarkan pengontrol pandangannya. Facelet jauh unggul ke JSP.


7
2018-05-03 11:30