使用struts 2 with tiles
时出现此异常org.apache.tiles.definition.NoSuchDefinitionException:/index.jsp
// tiles.xml
<tiles-definitions>
<definition name="baseLayout" template="/index.jsp">
<put-attribute name="title" value="/Template" />
<put-attribute name="header" value="/Header.jsp" />
<put-attribute name="menu" value="/Menu.jsp" />
<put-attribute name="body" value="/body.jsp" />
<put-attribute name="footer" value="/Footer.jsp" />
</definition>
<tiles-definitions>
// index.jsp的
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="footer"/>
</body>
</html>
// web.xml中
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.
DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
// struts.xml中
<package name="default" namespace="/test" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="login" class="com.medics.action.LoginAction">
<result name="SUCCESS" type="tiles">/index.jsp</result>
</action>
</package>
我搜索了很多但没有找到任何内容
答案 0 :(得分:2)
org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp
表示没有tile定义,没有名称“/index.jsp”的定义
当使用struts和tiles时...你的请求进入struts然后到tile中,tile组成了视图,所以你不应该有任何名为“anything.jsp”的tile定义。
所以只需替换
<result name="SUCCESS" type="tiles">/index.jsp</result>
与
<result name="SUCCESS" type="tiles">baseLayout/result>
现在已经解决了......我会重命名index.jsp,template.jsp(我觉得它不那么混乱),为什么你有一个名为“/ Template”的put属性?
现在要解决这个问题,我建议您将struts2结果目标更改为“baseLayout”,但这可能不是您的意思,因此您可能希望对新页面使用baseLayout定义,因此添加新定义:
<definition name="index" extends="baseLayout">
<put-attribute name="title" value="My Title for Index" />
<put-attribute name="body" value="/index.jsp" />
</definition>
现在上面将在defaultTemplate中添加该值并添加(或者如果名称相同,覆盖)创建index.jsp页面的基本模板中的内容,现在你的struts.xml应该有
<result name="SUCCESS" type="tiles">index</result>
答案 1 :(得分:0)
我今天遇到了这个问题。 虽然这是一个很久以前的问题,但我找到了如下解决方案:
<result name="SUCCESS" type="dispatcher">/index.jsp</result>
只需将tiles
替换为dispatcher
,我就可以使用。