在Apache Tiles上找不到属性

时间:2014-12-17 23:42:33

标签: spring spring-mvc apache-tiles

我在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

我做错了什么?

2 个答案:

答案 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