我在Sprint MVC应用程序上使用Apache Tiles,我有这个tiles.xml:
<tiles-definitions>
<definition name="defaultLayout" template="/WEB-INF/tiles/template/defaultLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/WEB-INF/tiles/template/header.jsp" />
<put-attribute name="content" value=""/>
<put-attribute name="footer" value="/WEB-INF/tiles/template/footer.jsp" />
</definition>
<definition name="home" extends="defaultLayout">
<put-attribute name="title" value="Alsa" />
<put-attribute name="content" value="/WEB-INF/pages/home.jsp" />
<put-attribute name="active" value="index" />
</definition>
</tiles-definitions>
我要做的是使用active属性将类添加到活动菜单项。为此我在header.jsp中有这个:
<%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
<tilesx:useAttribute name="active" />
问题是,每当我尝试渲染页面时,我都会收到此错误:
org.apache.tiles.template.NoSuchAttributeException:导入错误 属性。属性“active”为null
我做错了什么?
答案 0 :(得分:13)
这里的技巧是将cascade=true
添加到您的属性中,以便嵌套定义和模板可用。
<definition name="home" extends="defaultLayout">
<put-attribute name="title" value="Alsa" />
<put-attribute name="content" value="/WEB-INF/pages/home.jsp" />
<put-attribute name="active" value="index" cascade="true"/>
</definition>
请参阅: https://tiles.apache.org/framework/tutorial/advanced/nesting-extending.html
答案 1 :(得分:1)
您可能需要申报该课程。你还需要id。
<tilesx:useAttribute name="active" id="active" class="java.lang.String"/>
此外,如果您的应用程序中除了“home”之外还有其他tile定义,并且如果其中任何一个未定义“active”属性,您可能需要将“ignore”设置为true作为定义的一部分以避免运行时错误。更多信息:https://tiles.apache.org/framework/tiles-jsp/tlddoc/index.html