问题
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>
Her 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? Help would be highly appreciated, thanks on advance!
回答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.
来源:https://stackoverflow.com/questions/23510695/tiles-attribute-x-not-found