JSP-Seiten in Unterordnern ablegen

Alex1102

Mitglied
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.
 

Alex1102

Mitglied
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

Aktives Mitglied
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

Mitglied
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" >
<h:eek:utputText 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" >
<h:eek:utputText 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

Aktives Mitglied
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 ;)
 

Ähnliche Java Themen

Neue Themen


Oben