【问题标题】:How to pass values from JSP to tiles attribute?如何将值从 JSP 传递到图块属性?
【发布时间】:2012-02-13 12:24:45
【问题描述】:

我正在将现有的 Tiles 1 webapp 转换为 Tiles 2 架构。我在将值从 JSP 页面传递到图块属性时遇到问题。

这是我的瓦片定义文件(tiles-definition.xml)

<tiles-definitions>

    <definition name="cda.layout" template="/jsp/layouts/layout.jsp">
        <put-attribute name="pageTitle" value="StoryTitle" type="string"/>
        <put-attribute name="pageHeader" value="StoryHeader" type="string"/>
        <put-attribute name="resources" value="" type="string"/>
    </definition>

</tiles-definitions>

layout.jsp 看起来像:

<html>
    <head>
    <title><tiles:insertAttribute name="pageTitle" flush="true"/></title> 
    </head>

    <body>
    ...
    ...

    <div class="content">
    <h1><tiles:insertAttribute name="pageHeader" flush="true"/></h1>
    </div>

    ...
    ...
    </body>
</html>

我有一个使用布局的故事页面,需要将值传递给模板属性。

    <%
    // create a business object and populate
    String mytitle= story.getTitle();
    String myheader = story.getHeader();
    %>

<tiles:insertTemplate template="../layouts/layout.jsp"  flush="false" >
    <tiles:putAttribute name="pageTitle" value="${mytitle}"/>
    <tiles:putAttribute name="pageHeader"value="${myheader}"/>
</tiles:insertTemplate>

在story.jsp 中,我可以System.out.print() mytitle、myheader 的值,它们显示正确。但是,这些值不会传递给 tile 属性。

知道如何解决这个问题吗?

【问题讨论】:

    标签: spring jsp tiles


    【解决方案1】:

    ${mytitle}是一个JSP EL表达式,意思是:在页面范围,或请求范围,或会话范围,或应用范围内找到一个属性,命名为“mytitle”。

    通过定义 scriptlet 变量,您没有在任何这些范围内定义属性。如果你有它会工作

    pageContext.setAttribute("mytitle", mytitle);
    

    但是在 JSP 中使用 scriptlet 是不好的做法。我不知道你的故事豆来自哪里,但它可能是一个请求属性。如果是这样,您可以使用 JSTL 以这种方式定义新的 page-scope 属性:

    <c:set var="mytitle" value="${story.title}"/>
    

    这是不必要的,因为你可以直接在tiles标签中使用这个表达式:

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

    this tutorial 中阅读有关 JSP EL 的更多信息。

    【讨论】:

    • 感谢您的回答,我正在使用此解决方案,但问题是输出将是 ${story.title} 故事的标题。如您所见,${story.title} 将被视为变量和值。虽然,我只是从 Java 而不是 JSP 传递它。
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 2017-05-21
    • 1970-01-01
    • 2023-03-18
    • 2018-02-03
    • 2013-11-25
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多