Tiles Template + JSF-Navigation

Wutklumpen

Mitglied
Hallo mal wieder!

Hab heute meiner Site einn Template verpassen wollen, da es doch langsam mehr Seiten werden! Das ganze über Tiles 2.
Ein Modul umfasst zB die Navi-Leiste mit den Commandlinks darin. Das ganze is in die normale Seite eingabaut, funktioniert auch soweit alles wunderbar!
Die Grafiken sind da, die Links sind da.
Allerdings passiert jetzt glatt garnichts mehr, wenn ich auf den ein oder anderen Navi-Link drücke!

Hab testweise auch für die Template .jsp eine Navigation-rule geschrieben, aber es tut sich rein gar nichts!
Jmd ne Idee oder ein Tutorial welches sich damit beschäftigt?

Irgendwie wär das ja sonst Sinnfrei!

Gruß, der Klumpen!
 
Hallo,

also ohne irgendeinen Quellcode zu sehen, kann ich leider auch nur Vermutungen anstellen. Wenn einfach gar nix passiert - sprich du klickst auf die Links und nix tut sich, der Server hat in seinem log auch keine Fehlermeldungen (auch nicht beim deployen) und vorher hat es funktioniert, dann prüf doch mal, ob deine commandLinks auf der resultierenden Seite (also der, wo alle Teile des Templates zusammengesetzt sind) auch noch innerhalb eines <h:form> Tags sind.

Gruß
THMD
 
Die Links waren noch in einer Form! Ich schätzemal, das es eifnach daran liegt, das ich absolut kein Plan von der Navigation überhaupt habe! Es kommen weder Fehler, noch, gibt es ne Reaktion in der Console! Das einzige was passiert ist, dass sich die seite in ner Millisekunde wieder aufbaut! Wobei das nichmal richtig ist, er versucht kurz was zu laden, und is dann sofort "done"!

Bin jetzt soweit, das die Site vollständig auf ein Template gestützt ist!
Das ist zwar schön für look & feel, aber das die Funktionalität aller components mit action-attribut flöten geht is nich so das wahre!

Ich versuch grade mal zu schildern wie das ungefähr aussieht:

Zur Struktur:

Webcontent
|-----bodies(hier liegen die inhalte für die verschiedenen Bodies)
| |-----eingabe.jsp
|
|-----frags(hier liegen die Fragmente für das Template
| |------header.jsp
| |------footer.jsp
|-----eingabe.jsp(eine 2zeilige dummie.jsp um das template aufzurufen)

eingabe.jsp:
Code:
<%@ taglib prefix="ti" uri="http://tiles.apache.org/tags-tiles"%>
<ti:insertDefinition name="input"></ti:insertDefinition>

Dann das Template selbst:
template.jsp:
Code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="ti" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="t"  uri="http://myfaces.apache.org/tomahawk"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>	
	<head>
		<link rel="stylesheet" type="text/css" href="css/my.css">
	</head>
<body>
	<f:view>
		<t:div id="wrapper">
			<t:div id="header">
				<ti:insertAttribute name="header"></ti:insertAttribute>
			</t:div>
			<t:div id="siteplane">
				<ti:insertAttribute name="body"></ti:insertAttribute>
			</t:div>
			<t:div id="footer">
				<ti:insertAttribute name="footer"></ti:insertAttribute>
			</t:div>					
		</t:div>
	</f:view>
</body>
</html>

Die tiles-def.xml:
Code:
<!DOCTYPE tiles-definitions PUBLIC  
 "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"  
 "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">  

<tiles-definitions>
    <definition name="commonPage" template="/template.jsp">
    	<put-attribute name="header" value="/frags/header.jsp" />
    	<put-attribute name="footer" value="/frags/footer.jsp" />
    </definition>
  
   	<definition name="input" extends="commonPage">
    	<put-attribute name="body" value="/bodies/eingabe.jsp" />
   	</definition>
</tiles-definitions>

Hier zB die header.jsp( ist auch meine Menü-Leiste dabei):
Code:
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="t"  uri="http://myfaces.apache.org/tomahawk"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<html>
	<head>
	<link rel="stylesheet" type="text/css" href="css/my.css">
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
	<f:view>
		<h:form id="navi">
			<h:commandLink id="homelink" styleClass="navilink" value=".:Home:." action="home"></h:commandLink>					
			<h:outputText value=" | " styleClass="navilink"></h:outputText>
			<h:commandLink styleClass="navilink" value=".:Hinzufügen:." action="input"></h:commandLink>
			<h:outputText value=" | " styleClass="navilink"></h:outputText>
			<h:commandLink styleClass="navilink" value=".:Suche:." action="search"></h:commandLink>
			<h:message for="homelink"></h:message>
		</h:form>  
	</f:view>
</body>
</html>

Zur faces-config.xml(nur die betreffende Navi-Rule):
Code:
<navigation-rule>
		<from-view-id>/eingabe.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/ausgabe.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>home</from-outcome>
			<to-view-id>/index.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>input</from-outcome>
			<to-view-id>/eingabe.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>search</from-outcome>
			<to-view-id>/search.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>

Wie schon gesagt habe ich auch testweise für die header.jsp die Navi-Rule angelegt, aber es passiert genauso wenig! Mir stellt sich nur die Frage, ob man die Navi-Rules irgendwie anpassen muss, entweder an das Templatefragment, oder doch nur die resultierende Seite oder was auch immer!

Das Tutorial von Apache kannste ja voll in die tonne treten, 3 Seiten funktionieren, die 4te hat nur ne Überschrift und die 5 krichtn 404...
Bin froh, dass ich dann wenigstens diese Seite hier gefunden hab Klick), allerdings kratzt die wie die meisten Tutorials, nur an der Oberfläche.

wie bekomm ich jetzt meine Links und Buttons zum laufen? =)
 
Hallo,

Auf deiner resultierenden Seite bekommst du, wenn du es so wie in deinem Beispiel machst mehrere f:view Tags die auch noch miteinander verschachtelt sind. Das funktioniert so nicht. Probier mal folgendes.

In deiner template.jsp setzt du die insertAttributes in subviews, damit es keine Probleme mit id's gibt (Tiles2 benutzt intern jsp:include, und da sollte man besser nen subview nehmen)
Code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="ti" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="t"  uri="http://myfaces.apache.org/tomahawk"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>	
	<head>
		<link rel="stylesheet" type="text/css" href="css/my.css">
	</head>
<body>
	<f:view>
		<t:div id="wrapper">
			<t:div id="header">
                            <f:subview id="header_view">
				<ti:insertAttribute name="header"></ti:insertAttribute>
                            </f:subview>
			</t:div>
			<t:div id="siteplane">
                              <f:subview id="siteplane_view">
				<ti:insertAttribute name="body"></ti:insertAttribute>
                              </f:subview>
			</t:div>
			<t:div id="footer">
                             <f:subview id="footer_view">
				<ti:insertAttribute name="footer"></ti:insertAttribute>
                             </f:subview>
			</t:div>					
		</t:div>
	</f:view>
</body>
</html>

In allen jsp's die du jetzt in deinen Templatedefinitionen einbindest, fliegen jetzt die <f:view> Tags raus (die hat ja quasi das Template schon)
Also als Beispiel deine header.jsp
Code:
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="t"  uri="http://myfaces.apache.org/tomahawk"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<html>
	<head>
	<link rel="stylesheet" type="text/css" href="css/my.css">
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
		<h:form id="navi">
			<h:commandLink id="homelink" styleClass="navilink" value=".:Home:." action="home"></h:commandLink>					
			<h:outputText value=" | " styleClass="navilink"></h:outputText>
			<h:commandLink styleClass="navilink" value=".:Hinzufügen:." action="input"></h:commandLink>
			<h:outputText value=" | " styleClass="navilink"></h:outputText>
			<h:commandLink styleClass="navilink" value=".:Suche:." action="search"></h:commandLink>
			<h:message for="homelink"></h:message>
		</h:form>  
</body>
</html>

Jetzt sollte es eigentlich funktionieren.

Und jetzt noch der subjektiv eingefärbte Teil ;) . Schau dir bei Gelegenheit mal Facelets an. Ich persönlich finde es wesentlich unkomplizierter als Tiles. Und außerdem ist es ab JSF 2 quasi die Standard-Template Lösung.

Gruß
THMD
 
Das war der Ausschlag gebende Punkt! Subviews haben die Lösung gebracht! Jetzt funktioniert mein CSS zwar nur noch zur hälfte, aber das sollte ich noch rausbekommen! Ahh.. da bekommt man doch glatt gute Laune am Morgen! =)

Stichwort Facelets: Hab ich mir auch schon angesehen, aber so anch und nach kam ich zum Entschluss, das ich damit mit Spatzen auf Kanonen schießen würde! (€dit: Oder so ähnlich! lol) Mir wars irgendwie nich recht, meine seiten in XHTML zu schreiben, nich das jetzt viel drinstehen würde, aber trotzdem! ;) Vllt lieg ich da auch irgendwie falsch, ich lass mich gern von etwas Überzeugen!^^

Besten dank nochmal für den Tipp!


Gruß, der Klumpen
 

Neue Beiträge

Zurück