# Was bedeutet "Cannot find FacesContext"



## freez (11. Jan 2007)

Hallo,

ich habe eine JSF Seite geschrieben, und beim Aufruf fliegt mir eine javax.servlet.jsp.JspException mit der Meldung "Cannot find FacesContext".

Der weitere Teil der Exception schaut so aus:

```
at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:399)
	at com.sun.faces.taglib.jsf_core.ViewTag.doStartTag(ViewTag.java:105)
	at org.apache.jsp.index_jsp._jspx_meth_f_view_0(index_jsp.java:134)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:108)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:833)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
	at java.lang.Thread.run(Unknown Source)
```

Leider sehe ich keinen Verweis auf meine Sourcen ... scheinbar fehlt mir was, oder ich habe etwas verkehrt gemacht. Nur was?

Der Vollständigkeit halber hier noch die index.jsp, welche ich aufrufen will:

```
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
	<base href="<%=basePath%>">

	<title></title>
	
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>
  
<body>
	<f:view>
		<h:form>
			<h:panelGrid columns="2"> 
				<f:facet name="header">
					<h:outputText value="Bitte geben Sie Ihre Namen ein und starten das Spiel mit einem Klick auf den Button."></h:outputText>
				</f:facet>
				<h:outputLabel for="player1" value="Spieler 1: "></h:outputLabel>
				<h:inputText id="player1" value="#{memoryHandler.player1Name}"></h:inputText>
				<h:outputLabel for="player2" value="Spieler 2: "></h:outputLabel>
				<h:inputText id="player2" value="#{memoryHandler.player2Name}"></h:inputText>
				<<h:panelGroup></h:panelGroup>
				<h:commandButton style="align: right;" action="#{memoryHandler.startGame}" value="Spiel starten"></h:commandButton>
			</h:panelGrid>
		</h:form>
	</f:view>

</body>
</html>
```

und die faces-config:

```
<?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>memoryHandler</managed-bean-name>
		<managed-bean-class>
			memory.handler.MemoryHandler
		</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	<navigation-rule>
		<from-view-id>/memory.jsp</from-view-id>
	</navigation-rule>
	<navigation-rule>
		<from-view-id>/index.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/memory.jsp</to-view-id>
		</navigation-case></navigation-rule></faces-config>
```

Vielen Dank schon mal.

PS: im Browser wird auf die Zeile mit <f:view> gezeigt.


----------



## HLX (12. Jan 2007)

Hast du das FacesServlet in die web.xml aufgenommen?


----------



## freez (12. Jan 2007)

ja, habe ich ... und es gibt auch noch eine 2. JSF Seite namens memory.jsp, welche funktioniert ... hier die 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" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/faces-config.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>
```


----------



## freez (12. Jan 2007)

Hm, ich habe nun mal testweise eine start.jsp erstellt, mit nur text zwischen dem <f:view> Tag. Diese Seite hat funktioniert. Und nun funktioniert auch die index.jsp. Ich habe seit dem gestrigen Beitrag nichts verändert. Ausser den Computer in den Ruhezustand zu fahren. Hm, das ist schon eine komische Sache. Aber vielen Dank für die Hilfe.


----------



## freez (29. Mai 2007)

Hallo,

ich habe heute wieder das gleiche Problem gehabt. Nun ja, dadurch, daß ich nun etwas mehr Erfahrung mit Tomcat habe, habe ich auch rausgefunden, an was es liegt. Der Neustart des Computers war es jedenfalls nicht. Rufe ich die index.jsp auf, dann kommt der obige Fehler. Rufe ich die index.jsf auf, klappt alles, wie es soll. Gebe ich keine Datei an, die aufgerufen werden soll, dann gibt mir Tomcat nicht die index.jsf, sondern die index.jsp. Und das war mein Problem. Es war nur nicht klar zu erkennen, weil im Browser nicht angezeigt wurde, daß er die jsp aufrufen will. Ich war fest davon überzeugt, daß tomcat mir meine index.jsf anzeigen will. Also, nur ein Konfigurationsproblem.


----------



## Guest (30. Mai 2007)

Um JSF mitzuteilen, ob er die aktuelle aufgerufene Ressource als JSF-Datei behandeln soll, muss die Endung, die in der web.xml angegeben wird, benutzt werden.


```
...
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping> 
...
```

Soll beispielsweise die index.jsp als faces-datei behandelt werden, muss sie als .../.index.jsf aufgerufen werden.
JSF weiss dann, das er die index.jsp nehmen muss und sie als Faces-Datei behandeln muss...


----------

