# Warum werden die Managed Beans nicht erkannt?



## A.T. (15. Feb 2008)

Hallo zusammen,
zum zweiten mal heute... Hoffentlich legt sich das bald wieder!

Versuche mich wie gesagt ein wenig ins JEE Umfeld einzuarbeiten und im Moment bin ich bei JSF gelandert.
Arbeite mit Eclipse und Tomcat.

Versuche jetzt ein Beispiel das ich gefunden habe auszuprobieren und lauffähig zu machen. Aber irgendwie funktioniert das vorne und hinten nicht. Meine Vermutung ist das die Managed Beans nicht erkannt werden...

Im Moment sieht es so aus das wenn ich das Projekt im Browser aufrufe mir der Qulltext der Datei listBooks.jsf angezeigt wird. Desweitern bekomme ich sowohl in editBooks.jsf als auch in listBooks.jsf Warnungen angezeigt das bookListBean und bookBean nicht "resolved" werden können.

Woran kann das liegen? Wäre für jede Hilfe Dankbar!

Projektaufbau:

```
JSFTest
-src
--de.JSFLibrary.library
---Book.java
---BookList.java
---SimulateDB.java
--Libraries
-build
--...
-WebContent
--META-INF
---MANIFEST.MF
--WEB-INF
---lib
----MyFaces Libraries
---faces-config.xml
---web.xml
--editBooks.jsf
--index.jsf
--listBooks.jsf
```

faces-config.xml

```
<?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>
	<application> 
		<locale-config>   
			<default-locale>de_DE</default-locale>   
			<supported-locale>de</supported-locale>  
		</locale-config>
	</application>

	
	<navigation-rule>
		<description>List of books</description>
		<from-view-id>/listBooks.jsf</from-view-id>
		<navigation-case>
			<from-outcome>editBook</from-outcome>
			<to-view-id>/editBook.jsf</to-view-id>
		</navigation-case>
	</navigation-rule>

	<navigation-rule>
		<description>Add or edit a book</description>
		<from-view-id>/editBook.jsf</from-view-id>
		<navigation-case>
			<from-outcome>listBooks</from-outcome>
			<to-view-id>/listBooks.jsf</to-view-id>
			<redirect />
		</navigation-case>
	</navigation-rule>

	
	<managed-bean>
		<description>Book bean</description>
		<managed-bean-name>bookBean</managed-bean-name>
		<managed-bean-class>de.jSFLibrary.library.Book</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>

	<managed-bean>
		<description>BookList Bean</description>
		<managed-bean-name>bookListBean</managed-bean-name>
		<managed-bean-class>de.jSFLibrary.library.BookList</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>

</faces-config>
```

web.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>JSFLibrary</display-name>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
		<welcome-file>sample.jsp</welcome-file>
	</welcome-file-list>
</web-app>
```

editBooks.jsf

```
<%@ page language="java"%>
<%@ 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>Add / Edit a book</title>
</head>
<body>
<f:view>
	<h:form>
		<h:inputHidden id="id" value="#{bookBean.id}" />
		<h:panelGrid columns="2" border="1">
			<h:outputText value="Author:" />
			<h:inputText id="author" value="#{bookBean.author}">
			</h:inputText>
			<h:outputText value="Title:" />
			<h:inputText id="title" value="#{bookBean.title}">
			</h:inputText>
			<h:outputText value="Available:" />
			<h:selectBooleanCheckbox id="available" value="#{bookBean.available}" />
		</h:panelGrid>
		<h:commandButton value="Save" action="listBooks"
			actionListener="#{bookBean.saveBook}" />
	</h:form>
</f:view>
</body>
</html>
```

listBooks.jsf

```
<%@ page language="java"%>
<%@ 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>List of books</title>
</head>
<body>
<f:view>
	<h:form id="bookList">
		<h:dataTable id="books" value="#{bookListBean.books}" var="book"
			border="1">
			<h:column>
				<f:facet name="header">
					<h:outputText value="Author" />
				</f:facet>
				<h:outputText value="#{book.author}" />
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Title" />
				</f:facet>
				<h:outputText value="#{book.title}" />
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Available" />
				</f:facet>
				<h:selectBooleanCheckbox disabled="true" value="#{book.available}" />
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Edit" />
				</f:facet>
				<h:commandLink id="Edit" action="editBook"
					actionListener="#{bookBean.selectBook}">
					<h:outputText value="Edit" />
					<f:param id="editId" name="id" value="#{book.id}" />
				</h:commandLink>
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Delete" />
				</f:facet>
				<h:commandLink id="Delete" action="listBooks"
					actionListener="#{bookBean.deleteBook}">
					<h:outputText value="Delete" />
					<f:param id="deleteId" name="id" value="#{book.id}" />
				</h:commandLink>
			</h:column>
		</h:dataTable>
		<h:commandLink id="Add" action="editBook"
			actionListener="#{bookBean.initBook}">
			<h:outputText value="Add a book" />
		</h:commandLink>
	</h:form>
</f:view>
</body>
</html>
```

sampel.jsf

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<jsp:forward page="/listBooks.jsf" />
</body>
</html>
```


----------



## Reeny (15. Feb 2008)

Hmmm ... sieht für mich alles richtig aus ...

Deswegen mal ein Schuss ins Blaue:
Haben deine bookListBean und deine bookBean einen leeren Konstruktor?

Kannst du vielleicht auch mal den genauen Wortlaut der Fehlermeldung (Server-Log und/oder angezeigte Fehlerseite) posten?


----------



## number8 (15. Feb 2008)

Stimmt dieses jsp:forward denn? Muss dazu nicht noch was in der web.xml eingetragen werden? *.jsf oder so...


----------



## Reeny (15. Feb 2008)

Du hast recht! Ist mir gar nicht aufgefallen. Du musst statt


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

das schreiben:

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

Aber wenn du's doch weißt, hättest du es doch ausprobieren können, oder ... ?


----------

