1

使用带有瓷砖的 struts 2 时出现此异常

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> 

我搜索了很多但一无所获

4

2 回答 2

3
org.apache.tiles.definition.NoSuchDefinitionException: /index.jsp

表示没有tiles定义,即没有定义名称“/index.jsp”

使用struts 和tiles 时......您的请求进入struts,然后到tiles 组成视图的tiles,因此您不应该有任何名为“anything.jsp”的tiles 定义。

所以只需更换

<result name="SUCCESS" type="tiles">/index.jsp</result>

<result name="SUCCESS" type="tiles">baseLayout/result>

现在已经解决了......我将重命名 index.jsp、template.jsp(我认为它不那么令人困惑),为什么你有一个名为 "/Template" 的 put-attribute ?

现在要解决这个问题,我建议您将 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>
于 2011-01-23T00:48:35.577 回答
0

我今天遇到了这个问题。虽然这是很久以前的问题,但我找到了以下解决方案:

<result name="SUCCESS" type="dispatcher">/index.jsp</result>

只需将类型替换tilesdispatcher对我有用的类型。

于 2015-05-22T08:07:50.007 回答