# Probleme mit Templates in einem Webprojekt



## braindump23 (13. Sep 2013)

Hallo Leute, 

ich nutze Eclipse mit Maven und folgendem Archetype (webapp-javaee7 (codehaus mojo)).
Das sieht bei mir dann so 
	

	
	
		
		

		
			





 bzw. so 
	

	
	
		
		

		
		
	


	




 aus.

Wenn ich das ganze jetzt auf meinen Glassfish AS deploye und http://localhost:8080/testwebapp/index.jsf aufrufe erhalte ich einen 
	
	
	
	





```
HTTP Status 404 - Not Found
```
Woran liegt das? Was muss ich wo konfigurieren, dass das in diesem Fall intern auf die index.xhtml gegangen wird? Da ich ja im Jee 7 Kontext unterwegs bin ist ja die web.xml obligatorisch, bei mir steht folgendes drin:

```
<?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_3_0.xsd" version="3.0">
  <display-name>testwebapp</display-name>
  <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-list>
</web-app>
```
Rufe ich dagegen http://localhost:8080/testwebapp/index.xhtml erhalte ich eine Site allerdings wird das template (decorator.xhtml) und die CSS-Stylesheets nicht verwendet.
decorator.xhtml:

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 STRICT//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
	  xmlns:h="http://java.sun.com/jsf/html" 
	  xmlns:ui="http://java.sun.com/jsf/facelets">
	<h:head>
		<title>testpage</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<h:outputStylesheet name="css/default.css" />
	</h:head>
	<h:body>
		<div id="container">
			<div id="header">
				<p>
					Beispielanwendung
				</p>
			</div>
			<div id="content">
				<ui:insert name="content">
					[Template content will be inserted here]
				</ui:insert>
			</div>
			<div id="header">
				<p> (C) 2013 test.de </p>
			</div>
		</div>
	</h:body>
</html>
```
Eclipse moniert hier 
	
	
	
	





```
Undefined attribute name (xmlns).
```
 dmit kann ich aber nichts richtig anfangen, bzw. es ist mir unklar was ich hier tun soll?

default.css:

```
body {
	margin: 0;
	padding: 0; 
	background-color: #EAECEE;
	font-family: Verdana, sans-serif;
	font-size: 0.9em;
}
#container {
	margin: 0 auto;
	padding: 0 20px 10px 20px;
	border: 1px solid #666666;
	width: 865px;
	padding-top: 10px;
}
#header{
	font-size: 1.3em;
	border: 1px solid #666666;
	background: #EAECEE;
	padding: 0 15px 5px 15px;
	margin-bottom: 50px;
}
#footer{
	clear: both;
	text-align: center;
	color: #666666;
	font-size: 0.85em;
	padding: 3em 0 0 0;
}
h2 {
	font-size: 1.2em;
}
```

index.xhtml:

```
<?xml version="1.0" encoding="UTF-8" ?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
     			xmlns:f="http://java.sun.com/jsf/core"
      			xmlns:h="http://java.sun.com/jsf/html"
				xmlns:ui="http://java.sun.com/jsf/facelets" 
				template="templates/decorator.xhtml">
	<ui:define name="content">
		<h1>Willkommen auf der Homepage?!</h1>
		<h1>Bean Test:</h1>
    	<h:outputText value="HelloBean says: #{helloWorldBean.greeting}" />
	</ui:define>
</ui:composition>
```
... die Funktion der Bean wird auch nicht ausgeführt.

Wo liegen die Probleme? Ich bin totaler Newbie und weiss mir trotz Google und Tutorials (eigentlich sollte es so passen) nicht weiter zu helfen.
Kann mir jemand mit den diversen Problemen auf die Sprünge bzw. weiterhelfen?

Mfg
Braindump


----------



## AndiE (13. Sep 2013)

Hallo,

nach meinen Erfahrungen hast du dir eine schwierige Umsetzung gesucht. Da ich auch relativ frisch in der Materie bin, kann ich dir auch nicht umfassend antworten. Trotzdem sind für mich  Glassfish und Maven erst einmal zwei Paar Schuhe.  

Meine Empfehlungen: 

1. Schau dir dir Videos von "Arun Gupta" an - der zeigt, wie man mit Glashfish deployt.->"sharky glassfish"

2. Für mich gehört "maven" mit "JBOSS" zusammen. Dabei nutze ich im localhost den JBOSS AS, oft wird auch der Apache Tomcat genutzt.

2a) Dort muss man eine "index.html" schreiben, die dann die ".xhtml" (hier "eingabe.jsf") aufruft.



```
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=eingabe.jsf">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
```
Gruß

Andre'


----------



## braindump23 (13. Sep 2013)

@AndiE
Sorry aber damit kann ich leider gar nichts anfangen.

Ich möchte Maven nutzen, davon unabhängig nutze ich den Glassfish 4.0 wg. JEE 7 für mich kommt der JBOSS also nicht in Frage. 

Mein Verständnis ist dass der Glassfish AS einen Servlet Container bereitstellt und eine JSF Anfrage (z.b. index.jsf) automatisch an die index.xhtml delegiert wird. Warum aber das von mir verwendete Template nicht angesprochen wird und diese Delegation nicht funktioniert ist mir absolut unklar.

Weitere Ideen?

Mfg
Braindump


----------



## braindump23 (17. Sep 2013)

Nochmal an alle, 

welche Möglichkeiten habe ich denn das Problem zu analysieren um bzgl. meiner Fragen voranzukommen.
Mit debuggen komme ich ja nicht wirklich weit?

Habt Ihr dazu Ideen?

Mfg
Adrian


----------



## stg (19. Sep 2013)

Deiner web.xml fehlt das Mapping fürs FacesServlet. Dort sollte ein Eintrag stehen, der ungefähr (je nach von dir gewünschter Konfiguration) so aussieht:

[XML]
<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>
[/XML]

Die gewünschte Seite würdest du dann unter 
	
	
	
	





```
[url]http://localhost:8080/testwebapp/faces/index.xhtml[/url]
```
 erreichen.

Der passende Eintrag für die welcome-File-list dann
[XML]
<welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
[/XML]
Die anderen Einträge kannst du löschen, wenn du sie nicht brauchst bzw es keien dazu passenden Seiten in deiner App gibt.

Wenn du eine andere Konfiguration willst (etwa Mapping auf *.jsf oÄ) dann kannst du das ja anpassen.


----------



## braindump23 (19. Sep 2013)

@stg:
Benötige ich die web.xml also doch auch in JEE 7 noch, ich dachte ich hätte da irgendwo was gelesen von wegen die web.xml wird nicht mehr benötigt? Kenntst Du dich da aus?

... und Danke natürlich ich werds mal versuchen!

Gruß
Braindump


----------



## stg (19. Sep 2013)

braindump23 hat gesagt.:


> @stg:
> Benötige ich die web.xml also doch auch in JEE 7 noch, ich dachte ich hätte da irgendwo was gelesen von wegen die web.xml wird nicht mehr benötigt?



Oha, das hab ich glatt überlesen. Stimmt, mit der Servlet-Version 3.1 ist die web.xml optional. Wie es da aber genau mit der Konfiguration ausschaut müsste ich selbst nachlesen, da muss ich erst mal passen.


----------

