# JSP-Seiten in Unterordnern ablegen



## Alex1102 (12. Jan 2010)

Hallo. 
Habe wieder eine kleines Problemchen und komme leider alleine nicht mehr weiter. 

Habe eine kleine JSF-Anwendung mit mehren Seiten geschriebe. 
(Verwende Tomcat 6, Facelets und CCS Style Sheets)

Wegen der besseren Struktur möchte die verschiedenen XHTML seiten in die 
Unterordner verschieben. 
Beispielsweise:

- pages
  home.xhtml
- admin_pages​show_customer_list.xhtml​- customer_pages​show_cutomer_date.xthml​
Das *Problem* ist das die in Unterordner abgelegte Seiten nicht gerendert werden.

Wie könnte man das Problem lösen.

Vielen Dank im Voraus.


----------



## jule37 (12. Jan 2010)

was du wissen willst steht hier:

JSF 2 fu, Part 2: Templating and composite components


----------



## Alex1102 (13. Jan 2010)

Danke für die schnelle Antwort.

Das Templating von Facelets benutzer ich schon, denn erst dann macht es auch Sinn Facelets überhaut einzusetzen.
Der Beitrag spielgelt zwar den Stand der Dinge in meinem Projekt. bis auf die Struktur wie ich diese haben möchte.
Löst aber leider nicht das von mir geschielde Problem. 

Oder habe ich da was übersehen? Bin leider kann guter Englischkenner.


----------



## jule37 (13. Jan 2010)

wenn deine seiten nicht gerendert werden gibt es dafür wahrscheinlich folgende gründe:


deine pfade sind falsch
dein kontext oder server ist nicht richtig konfiguriert
du hast irgendwo einen syntaxfehler

wird denn eine exception geworfen? bekommst du irgendeine fehlermeldung? es wäre auch nicht schlecht dein template und eine der views die nicht gerendert werden mal zu sehen.

also ich mache es immer 1:1 so wie es in dem tutorial steht und es funktioniert alles fabelhaft.

du kannst dir zur analyse auch mal eine hello world seite bauen die in dein template gerendert wird, so dass dort nur wenig passiert und leicht nachvollziehbar ist. wenn diese dann angezeigt wird bau sie nach und nach um zu einer der seiten, die nicht gehen. wenn sie dann plötzlich nicht mehr geht, weisst du woran es liegt.


----------



## Alex1102 (13. Jan 2010)

Hi.
Versuche es noch ein mal das Problem etwas genauer zu erläutern.

Wie gesagt habe wie Du es vorschlägst ein kleines Beispiel mit nur einem Template aufgesetzt.
Habe folgende einfache Ordnertruktur:
-pages
-layout​basicTemplate.xhtml​test1.xhtml​test2.xhtml​test3.xhtml​
Dabei navigiere ich einfach von der test1 zu test2 und anschließen zu test3 Seiten.
So funktioniert es alles wunderbar. 
Sobald ich jedoch etwas mehr Ordnung (siehe Ordnerstruktur im ersten Beitrag) reinbringe
wird die Seite test3 nicht mehr gerendert. 
Warum erst test3? 
Meine Vermutung nach liegt es an JSF und der verspäteten Anzeige von Pfaden.
Muss dazu sagen alle Pfade sind korrekt, faces-config.xml natürlich auch entsprechend angepasst 
und Syntaxfehler glaube ich auch nicht, da ich ja nur die Ordnerstruktur ändere.

Vielleicht noch eine Frage zu deinem letzten Beitrag.
Du schreibst es kann daran liegen das der kontext oder der server nicht richtig
konfiguriert ist. 
Wie kann ich an der Stelle den Tomcat konfigurieren? Habe da leider keine Erfahrung 

*Mein Code:*

*template.xhtml*

[XML]<!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:ui="http://java.sun.com/jsf/facelets">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title><ui:insert name="title">Default Title</ui:insert></title>

	<link rel="stylesheet" type="text/css" href="./css/basic.css" />
	<link type="text/css" rel="stylesheet" href="./css/header.css"/>
	<link type="text/css" rel="stylesheet" href="./css/search.css"/>
	<link type="text/css" rel="stylesheet" href="./css/advertisement.css"/>
	<link type="text/css" rel="stylesheet" href="./css/menu_top.css"/>
	<link type="text/css" rel="stylesheet" href="./css/menu_left.css"/>
	<link type="text/css" rel="stylesheet" href="./css/menu_middle.css"/>
	<link type="text/css" rel="stylesheet" href="./css/content.css"/>
</head>
<body>

	       <div class="main">

				<div id="header">
					<ui:insert name="header">
						<ui:include src="/pages/layout/header.xhtml" />
					</ui:insert>
				</div>

                <div id="advertisement">
                    <ui:insert name="advertisement">
                        <ui:include src="/pages/layout/advertisement.xhtml"/>        
                    </ui:insert>
                </div>

                <div id="menu_top">
                    <ui:insert name="menu_top">
                        <ui:include src="/pages/layout/menu_top.xhtml"/>
                    </ui:insert>
                </div>

                <div id="menu_left">
                    <ui:insert name="menu_left">
                        <ui:include src="/pages/layout/menu_left.xhtml"/>
                     </ui:insert>
                </div>

                <div id="menu_middle">
                    <ui:insert name="menu_middle">
                        <ui:include src="/pages/layout/menu_middle.xhtml"/>
                    </ui:insert>
                </div>


                <!-- Standart Benutzer Content -->  
                <div id="content">
                  <ui:insert name="content">
                    <ui:include src="/pages/layout/content.xhtml"/>      
                  </ui:insert>
                </div>
            </div>
</body>
</html>
[/XML]


*test1.xhtml*

[XML]<!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:ui="http://java.sun.com/jsf/facelets">

<body>

Dieser Text erscheint nicht, da er auÃŸerhalb von 
'ui:composition' liegt.

<ui:composition template="/pages/layout/template.xhtml">

    <ui:define name="title">
        Test 1
    </ui:define>

    <ui:define name="content">
        Das ist ein erster Test

        <h:form id="test1" action="/cms/login/" method="get">
            <h:commandLink id="test1" action="test1" immediate="false" >
            <hutputText value="test2"/>                
            </h:commandLink>
        </h:form>
    </ui:define>

</ui:composition>
</body>
</html>
[/XML]

*test2.xhtml* (Sieht gleich aus bis auf den Link zu test3)

[XML]<!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:ui="http://java.sun.com/jsf/facelets">

<body>

Dieser Text erscheint nicht, da er auÃŸerhalb von 
'ui:composition' liegt.

<ui:composition template="/pages/layout/template.xhtml">

    <ui:define name="title">
        Test 2
    </ui:define>

    <ui:define name="content">
        Das ist ein dritter Test
        <h:form id="test2" action="/cms/login/" method="get">
            <h:commandLink id="test2" action="test2" immediate="false" >
                <hutputText value="test3"/>                
            </h:commandLink>
        </h:form>
    </ui:define>

</ui:composition>

</body>
</html>[/XML]

*test3.xhtml*

[XML]<!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:ui="http://java.sun.com/jsf/facelets">

<body>

Dieser Text erscheint nicht, da er auÃŸerhalb von 
'ui:composition' liegt.

<ui:composition template="/pages/layout/template.xhtml">

    <ui:define name="title">
        Test 3
    </ui:define>

    <ui:define name="content">
        Das ist ein dritter Test
    </ui:define>

</ui:composition>

</body>
</html>

[/XML]


----------



## jule37 (13. Jan 2010)

joar und wie es scheint hast du syntaxfehler 

1. im template nimm doch mal <h:html>, <h:head>, <h:body> tags statt den html tags, damit das alles auch wirklich von jsf gerendert wird

2. in den ui compositions (test1-3) KEINE html und body usw tags verwenden, die werden sonst mehrfach gerendert, da sie ja schon im template sind

3. die ui compositions so anfangen:

[XML]<ui:composition   xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        template="/pages/layout/template.xhtml"> 
[/XML]

nicht mit <html...>

darüber hinaus würde ich dir empfehlen dein <h:form> in das template zu packen, so dass es den gesamten body umfasst, sonst wirds später kompliziert wenn du in verschiedenen compositions inputs hast. es geht immer nur ein form pro seite

alles in allem solltest du dir nochmal das tutorial durchlesen, da steht nämlich genau das alles drin


----------

