2011-01-22 45 views
0

我用struts 2时与瓷砖砖的Struts 2 NoSuchDefinitionException

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> 

我寻觅了很多,但没有发现任何

回答

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

意味着没有砖的定义,这是没有名字的定义“/ index.jsp“

当使用struts和tiles ...你的请求进入struts,然后出到瓷砖组成的视图,所以你不应该有任何瓷砖定义称为“anything.jsp”。

所以只需更换

<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> 
+0

它工作。谢谢了,你为我节省了一天@“为什么你有一个名为”/ Template“的put属性,它必须是”Template“,一个静态字符串属性 – 2011-01-24 07:48:24

+0

感谢我的这项工作 – Nook 2011-05-27 14:01:02

0

我遇到了这个问题天。 虽然早就是一个问题,我找到了解决办法如下:

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

dispatcher作品对我来说只是更换型tiles