Hallo zusammen
Seit drei Tagen schlage ich mit mit einem nervigen Tiles Problem herum.
Beim Aufruf einer Seite, welche durch das Tiles Framework aus mehreren JSF-Seiten zusammengesetzt werden soll, erhalte ich eine leere Seite als Response. Dabei werden durch den Server keinerlei Exceptions geworfen.
Hier die Konfiguration:
web-xml:
Der Auszug aus der tiles-defs.xml, welcher die entsprechende Definition erzeugt sieht so aus:
Die Layout Datei bindet die Tiles Inserts über subview oder verbatim Tags in den JSF Komponentenbaum ein:
Hier ist die aufgerufene Seite, welche lediglich die einleitenden HTML und JSF-Tags enthält und die Tiels Definition in den Body einbindet:
Der Aufruf erfolgt über den folgenden Redirect aus der Seite index.jsp:
Die JSF-Konfiguration läuft für eine Seite, welche lediglich JSF-Tags verwendet einwandfrei. Umgekehrt habe ich die Tiles-Konfiguration getestet, indem ich eine Testdefinition verwendet habe, welche ausser der leeren JSP-Seite nur eine einfache Textseite ohne JSF verwendet. Auch hier wird nur der umgebende HTML-Code ausgegeben, der Insert an sich jedoch nicht mehr ausgeführt. Das Problem scheint demnach hauptsächlich mit der Tiles-Konfiguration zusammenzuhängen.
Hat vielleicht jemand eine Idee, woran das liegen könnte oder ähnliche Erfahrungen?
Seit drei Tagen schlage ich mit mit einem nervigen Tiles Problem herum.
Beim Aufruf einer Seite, welche durch das Tiles Framework aus mehreren JSF-Seiten zusammengesetzt werden soll, erhalte ich eine leere Seite als Response. Dabei werden durch den Server keinerlei Exceptions geworfen.
Hier die Konfiguration:
web-xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>PLEBSWebClient</display-name>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<init-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>TilesServlet</servlet-name>
<servlet-class>org.apache.struts.tiles.TilesServlet</servlet-class>
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</init-param>
<init-param>
<param-name>definitions-parser-validate</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/views/404.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/views/403.jsp</location>
</error-page>
</web-app>
Der Auszug aus der tiles-defs.xml, welcher die entsprechende Definition erzeugt sieht so aus:
Code:
<definition name="plebs.mainLayout" path="views/tiles/layout.jsp">
<put name="header" value="views/tiles/header.jsp"/>
<put name="topmenu" value="views/tiles/empty.jsp"/>
<put name="leftmenu" value="views/tiles/leftmenu.jsp"/>
<put name="messagefield" value="views/tiles/messagefield.jsp"/>
<put name="footer" value="views/tiles/footer.jsp"/>
<put name="body1" value="views/tiles/empty.jsp"/>
<put name="body2" value="views/tiles/empty.jsp"/>
<put name="contextmenu" value="views/tiles/empty.jsp"/>
</definition>
<definition name="plebs.welcome" extends="plebs.mainLayout">
<put name="body1" value="views/tiles/welcome.jsp"/>
<put name="body2" value="views/tiles/gameSelection.jsp"/>
</definition>
Die Layout Datei bindet die Tiles Inserts über subview oder verbatim Tags in den JSF Komponentenbaum ein:
Code:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<div class="mainmenucontainer">
<f:subview id="leftmenu">
<tiles:insert attribute="leftmenu" flush="false"></tiles:insert>
</f:subview>
</div>
<div class="maincontainer">
<div class="headercontainer">
<f:subview id="header">
<tiles:insert attribute="header" flush="false"></tiles:insert>
</f:subview>
</div>
<div class="submenucontainer">
<f:subview id="topmenu">
<tiles:insert attribute="topmenu" flush="false"></tiles:insert>
</f:subview>
</div>
<div class="contentcontainer">
<f:verbatim>
<tiles:insert attribute="body1" flush="false"></tiles:insert>
</f:verbatim>
<f:verbatim>
<tiles:insert attribute="body2" flush="false"></tiles:insert>
</f:verbatim>
</div>
<div class="messagefield">
<f:verbatim>
<tiles:insert attribute="messagefield" flush="false"></tiles:insert>
</f:verbatim>
</div>
<div class="contextmenucontainer">
<f:verbatim>
<tiles:insert attribute="contextmenu" flush="false"></tiles:insert>
</f:verbatim>
</div>
<div = class="footercontainer">
<f:subview id="footer">
<tiles:insert attribute="footer" flush="false"></tiles:insert>
</f:subview>
</div>
</div>
Hier ist die aufgerufene Seite, welche lediglich die einleitenden HTML und JSF-Tags enthält und die Tiels Definition in den Body einbindet:
Code:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<f:view>
<head>
<title>PLEBS</title>
<meta http-equiv="expires" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="keywords" content="">
<meta http-equiv="description" content="PLEBS - Platform for Educational Business Simulations">
</head>
<link rel="stylesheet" type="text/css" href="/css/styles.css">
<link rel="javascript" type="text/javascript" href="/script/functions.js">
<body>
<f:subview id="pagecontainer">
<tiles:insert definition="plebs.welcome" flush="false"/>
</f:subview>
</body>
</f:view>
</html>
Der Aufruf erfolgt über den folgenden Redirect aus der Seite index.jsp:
Code:
<%@ page session="false" language="java" contentType="text/html; charset=ISO-8859-1"%>
<% response.sendRedirect("views/welcome.faces"); %>
Die JSF-Konfiguration läuft für eine Seite, welche lediglich JSF-Tags verwendet einwandfrei. Umgekehrt habe ich die Tiles-Konfiguration getestet, indem ich eine Testdefinition verwendet habe, welche ausser der leeren JSP-Seite nur eine einfache Textseite ohne JSF verwendet. Auch hier wird nur der umgebende HTML-Code ausgegeben, der Insert an sich jedoch nicht mehr ausgeführt. Das Problem scheint demnach hauptsächlich mit der Tiles-Konfiguration zusammenzuhängen.
Hat vielleicht jemand eine Idee, woran das liegen könnte oder ähnliche Erfahrungen?