Reputation: 1462
I'm working on a web project and I use Tiles to have multiple JSP's in one JSP.
I've encountered a problem where I get TilesIOException
.
I have this JSP with the name: mainpage.jsp
which contains all the JSP's for header, body and footer.
My body here should also contain some other JSP's, and therefore, I'm trying to use Tiles in that as well with no luck.
Here's the structure and the XML code in Tiles:
mainpage.jsp
----header.jsp
----body.jsp(mainpageBody.jsp)
--------bodybox1.jsp
--------bodybox2.jsp
--------bodybox3.jsp
--------bodybox4.jsp
----footer.jsp
tiles.xml
:
<definition name="mainpage" extends="mainpageLayout">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body" value="/mainpage/mainpageBody.jsp" />
<put-attribute name="mainbox0" value="/bodybox1.jsp" />
<put-attribute name="mainbox1" value="/bodybox2.jsp" />
<put-attribute name="mainbox2" value="/bodybox3.jsp" />
<put-attribute name="mainbox3" value="/bodybox4.jsp" />
</definition>
<definition name="mainpageLayout" template="/mainpage.jsp">
<put-attribute name="title" value="Template" />
<put-attribute name="header" value="/mainpage/header.jsp" />
<put-attribute name="body" value="/mainpage/body.jsp" />
<put-attribute name="footer" value="/mainpage/footer.jsp" />
</definition>
Here is my mainpageBody.jsp
:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ page import="java.text.*,java.util.*"%>
<script type="text/javascript">
function showRegisterUserPage() {
$(".frontpageBodyContent").load("showRegisterPageRegisterAction");
}
</script>
<div class="frontpageBodyContent">
<div id="frontPageContentDiv">
<table border="0" style="width:100%">
<tbody>
<tr>
<td>
<div id="bodybox1">
<tiles:insertAttribute name="bodybox1" />
</div>
</td>
<td>
<div id="bodybox2">
<tiles:insertAttribute name="bodybox2" />
</div>
</td>
</tr>
<tr>
<td>
<div id="bodybox3">
<tiles:insertAttribute name="bodybox3" />
</div>
</td>
<td>
<div id="bodybox4">
<tiles:insertAttribute name="bodybox4" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
WEB-INF
folder contains: lib
folder, tiles.xml
& web.xml
. lib
folder doesn't contain anything.
struts.xml
:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.action.extension" value=",action"/>
<package name="default" extends="struts-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="*MainAction" method="{1}" class="com.x.web.action.MainAction">
<result name="mainpage" type="tiles">mainpage</result>
<result name="success">index.jsp</result>
</action>
<action name="*RegisterAction" method="{1}" class="com.x.web.action.RegisterAction">
<result name="registeruserpage" type="tiles">registeruserpage</result>
<result name="redirect" type="redirect">${redirectUrl}</result>
</action>
<action name="registrering" method="showRegisterUserPage" class="com.x.web.action.RegisterAction">
<result name="registeruserpage" type="tiles">registeruserpage</result>
</action>
</package>
web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<javaee:display-name>X</javaee:display-name>
<context-param>
<javaee:param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</javaee:param-name>
<javaee:param-value>/WEB-INF/tiles.xml</javaee:param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<javaee:listener-class>org.apache.struts2.tiles.StrutsTilesListener
</javaee:listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
I get exceptions:
org.apache.tiles.TilesException:
ServletException including path '/templates/mainpage.jsp'.
org.apache.tiles.util.TilesIOException: JSPException including path '/content/mainpage/mainpageBody.jsp'.
org.apache.tiles.TilesException: Attribute 'bodybox1' not found.
What am I doing wrong?
Upvotes: 0
Views: 1617
Reputation: 1
Try this web.xml
:
<?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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>X</display-name>
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<context-param>
<param-name>tilesDefinitions</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
and check that tiles.xml
in WEB-INF
folder.
Upvotes: 0