【问题标题】:apache tiles - how to override an attribute from child templateapache tile - 如何覆盖子模板中的属性
【发布时间】:2013-02-14 21:23:52
【问题描述】:

问题是如何覆盖图块子模板中的属性。

我有两个模板:base 和 child。这是基本布局的一部分 - HTML 头:

<title>
    <tiles:insertAttribute name="title" />
    lyricsBase: <c:out value="${jukebox.name}" />
</title>

这是我的tiles.xml:

<definition name="t.base" template="/WEB-INF/tiles/base.jsp">
    <put-attribute name="title" value="SomeTitle"/>
</definition>
[...]
<definition name="t.song" extends="t.base">
    <put-attribute name="body" value="/WEB-INF/jsp/song.jsp"/>
    <put-attribute name="title" value="song.title"/>
</definition>

当我运行我的页面时,我得到以下 HTML 标题:song.title lyricsBase: xxx。我应该在子视图中添加什么代码来覆盖title 属性?例如,我正在尝试将其设为 ${song.title}

<tiles:putAttribute name="title" value="${song.title}" />

...但它不起作用。感谢您的帮助!

【问题讨论】:

    标签: jakarta-ee attributes tiles


    【解决方案1】:

    您不应该使用 value 属性,而是使用 expression 属性。在tiles3中,我遇到了put属性的字符串值问题,而没有级联为真......这假设tiles3(尽管大多数适用于大多数tiles 2)。

    以下内容未经测试:

    <definition name="t.base" template="/WEB-INF/tiles/base.jsp">
        <put-attribute name="title" cascade="true" value="SomeTitle"/>
    </definition>
    [...]
    <definition name="t.song" extends="t.base">
        <put-attribute name="body" value="/WEB-INF/jsp/song.jsp"/>
        <put-attribute name="title"  cascade="true" expression="EL:song.title"/>
    </definition>
    

    然后&lt;tiles:insertAttribute name="title" /&gt; 应该在您的模板中按预期工作。

    【讨论】:

    • 表达式(而不是值)解决了这个问题。谢谢!顺便说一句 - 你为什么在这里添加“级联”?对我来说,没有它也能正常工作。
    • 就在昨晚我遇到了一个奇怪的问题,即我无法在没有 cascade 对字符串为真的情况下覆盖一个值,它不会影响模板......只是字符串。如果你不需要这样做,那是完美的(你真的不应该这样做)。在定义内部模板时,您应该只需要级联......这也不是我的情况,但出于某种原因添加它对我有用。
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多