# Problem mit JSF Anwendung



## firestone (24. Jun 2010)

Hallo zusammen,

also ich bin ein  Newbie was JSF angeht und hätte vorab ein paar Fragen .
1. Hat jemand ein gutes Tutorial mit guten Beispielen für JSF Java und vielleicht sogar in Verbindung mit JSP und Struts
2. Ich habe nun gesehen das man sowohl mit JSP als auch mit xhtml arbeiten kann. Wo ist der Unterschied was ist besser 


Dann habe ich mal eine kleine Beispielanwendung versucht ans laufen zu kriegen diese arbeitet eigentlich mit xhtml und ich bekomme immer den Fehler JSPG0036E: Die Ressource /showMenu.jsp wurde nicht gefunden. Dabei arbeite ich doch gar nicht mit JSP Oo was mache ich falsch.

Hier folgender Aufbau
Im Verzeichnis WebContent habe ich meine xhtml Seiten
Im Verzeichnis WebContent/WEB-INF/ habe ich meine faces-config.xml und meine web.xml

faces-config sieht wie folgt aus 

```
<?xml version="1.0"?>
<faces-config 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_2_0.xsd"
		version="2.0">

	<application>
		<locale-config>
			<default-locale>de</default-locale>
			<supported-locale>en</supported-locale>
			<supported-locale>de</supported-locale>
		</locale-config>
		<message-bundle>de.bsdwest.jsf.resources.messages</message-bundle>
		<resource-bundle>
			<base-name>de.bsdwest.jsf.resources.messages</base-name>
			<var>msgs</var>
		</resource-bundle>
	</application> 	
	
</faces-config>
```

web.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  	<display-name>Stammdaten</display-name>
  	<welcome-file-list>
    	<welcome-file>/showMenu.xhtml</welcome-file>
  	</welcome-file-list>
  
  	<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>*.jsf</url-pattern>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
  
</web-app>
```

Dann habe ich noch die zwei jar files jsf-api-2.0.1.jar und jsf-impl-2.0.1.jar eingebunden.

Wo liegt jetzt der Fehler was mache ich falsch wieso meckert er an das er eine jsp Seite nicht finden kann ich dachte das geht auch mit xhtml Oo

Hilfe 

Lg fireli


----------



## firestone (24. Jun 2010)

keiner


----------



## Nogothrim (24. Jun 2010)

ich vermute dir fehlt ein Eintrag in der faces-config.xml, damit deine xhtml Facelets gerendert werden können:


```
<application>
...
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
...
</application>
```


----------



## firestone (24. Jun 2010)

Huhu

 nach viel googeln habe ich das was du geschrieben hast auch gefunden also was ich bis jetzt gemacht habe ich habe noch zusätzlich die 

jsf-facelets.jar
el-impl-1.0.jar

Eingebunden und in der web.xml folgende Sachen ergänzt


```
<context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
         
</context-param>

<context-param>
       
          <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
        
</context-param>
```
 
und in der faces-config.xml diese Zeile 

```
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
```

jetzt bekomme ich aber folgende Fehlermeldung 

```
24.06.10 14:09:56:859 CEST] 00000022 viewhandler   E   Error Rendering View[/showMenu.xhtml]
                                 com.sun.facelets.tag.TagException: /showMenu.xhtml @11,9 <h:head> Tag Library supports namespace: [url]http://java.sun.com/jsf/html[/url], but no tag was defined for name: head
	at com.sun.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:193)
	at com.sun.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:194)
	at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
	at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at com.sun.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:232)
	at com.sun.facelets.compiler.Compiler.compile(Compiler.java:105)
	at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:218)
	at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:149)
	at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:100)
	at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:519)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:569)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1455)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:793)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:444)
	at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:325)
	at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:687)
	at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3622)
	at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
	at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:927)
	at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1566)
	at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:175)
	at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
	at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
	at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
	at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
	at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
	at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
	at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
	at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
	at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
	at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
	at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
	at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
```

Was fehlt jetzt noch ?

Meine showMenu.xhtml sieht wie folgt aus


```
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" 
	  xmlns:h="http://java.sun.com/jsf/html" 
	  xmlns:f="http://java.sun.com/jsf/core">



<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" type="text/css" href="./css/default.css" />    
    <title>#{msgs.mainmenu_title}</title>
</h:head>

<h:body>
	<f:view>
	
	<h2>#{msgs.mainmenu_header}</h2>
	
	<p>
		
		<h:form>
		<ul>
			<li><a href="showActualList.jsf">#{msgs.mainmenu_actualList}</a></li>
			<li><a href="showAllItems.jsf">#{msgs.mainmenu_fullList}</a></li>
			<li>
				<h:commandLink id="link" action="#{ctrlStammdaten.createEntry}">
  					<h:outputText value="#{msgs.mainmenu_newEntry}"/>
				</h:commandLink>
			</li>
		</ul>
		</h:form>
	</p>
	</f:view>
</h:body>
</html>
```


----------



## Nogothrim (24. Jun 2010)

Das wird an deiner JSF version liegen.
<h:head> ist ein JSF 2.0 tag, es wird aber anscheinend JSF 1.x verwendet oder der Namespace ist nicht richtig definiert.


----------



## firestone (24. Jun 2010)

hmmm ok aber die jar files sind alle 2.0.1 Oo


----------



## Nogothrim (24. Jun 2010)

hmm mein classpath enthält auch jsf-api und jsf-impl 2.0.0 aber trotzdem benutze ich JSF 1.2, ka was man da umstellen müsste


----------



## firestone (24. Jun 2010)

Ok danke für die Hilfe  . Bin jetzt schon ein paar Schritte weiter.

Kannst du mir sagen ob es allgemeine Navigation-rules gibt oder muss ich die für jeden xhtml Seite seperat anlegen ??


----------



## Semerzo (25. Jun 2010)

Soweit ich mich entsinne, soll einer der Clou's von JSF 2 sein, dass Du recht wenig in XML machen musst. Du brauchst erstmal keine Navigation Rules => Learning JSF2: Navigation | Maxa Blog nennt sich _Implicit Navigation_. Eine komplette Übersicht, was JSF 2 an Änderungen mitbringt findet sich hier What’s New in JSF 2?  Andy Schwartz’s Weblog

Es könnte lohnen nach der Lektüre eines Tutorials darüber zu fliegen. Ich bin nicht sicher, ob alle alten JSF Tuts ein Update erfahren haben 

Der Blog-Eintrag ist recht nett, um eine JSF 2 Kickstart Anwendung zu machen
http://blogs.steeplesoft.com/2009/01/bootstrapping-a-jsf-2-project/


----------



## knoppers (25. Jun 2010)

com.sun.facelets.tag.TagException: /showMenu.xhtml @11,9 <h:head> Tag Library supports namespace: http://java.sun.com/jsf/html, but no tag was defined for name: head

du musst den namespace für <h: ... > in deiner xhtml Seite bekannt geben. Dann bekommst du auch den Fehler nicht mehr. Bsp.:

xmlns:ui="http://java.sun.com/jsf/facelets"

wie das ganze bei 

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">


----------

