【问题标题】:Spring + Tiles2 - put-attribute from model?Spring + Tiles2 - 模型的放置属性?
【发布时间】:2012-01-04 07:03:03
【问题描述】:

tl;dr - 我想根据传递给瓦片中视图的单个模型在瓦片定义中设置放置属性

我正在尝试创建一个页面以使用弹簧和瓷砖显示用户。现在我的页面可以很好地获取模型,但我希望页面的标题包含用户名(它必须从模型中获取)。我在下面的代码中包含了一些摘录:

tiles.xml:

<definition name="baseLayout" template="/WEB-INF/jsp/layout/layout.jsp">
    <put-attribute name="title" value="FitterBlog" />
    <put-attribute name="header" value="/WEB-INF/jsp/layout/header.jsp" />
    <put-attribute name="nav" value="/WEB-INF/jsp/layout/nav.jsp" />
    <put-attribute name="body" value="" />
    <put-attribute name="footer" value="/WEB-INF/jsp/layout/footer.jsp" />
    <put-attribute name="ads" value="/WEB-INF/jsp/layout/ads.jsp" />
    <put-attribute name="css-layout" value="/FitterBlog/resources/css/layout.css" />
</definition>
<definition name="user/display" extends="baseLayout">
    <put-attribute name="title" value="FitterBlog - ${user.username}" />
    <put-attribute name="body" value="/WEB-INF/jsp/user/display.jsp" />
</definition>

如您所见,我尝试使用与在 jsp 中相同的语法来显示用户名。 IE。我尝试使用 ${user.username} 来显示用户名,但这不起作用,我只是在标题中显示文本“${user.username}”而不是实际的用户名。

display.jsp:

//output the username from the user model, this works fine
${user.username}

UserController.java

@RequestMapping(value="display/**")
public ModelAndView displayUser(@ModelAttribute("user") User user, BindingResult result) {
    //TODO
    //retrieve user number from the URL
    //retrieve user from database
    //display user details
    user.setUsername("Awesome username!");
    return new ModelAndView("user/display", "user", user);
}

如您所见,我仍在大量开发中,目前我自己在用户对象上设置了用户名(而不是从数据库中获取),但这不是重点。

【问题讨论】:

    标签: spring-mvc views tiles


    【解决方案1】:

    在阅读了几个不同的网站后(另外,感谢 Ralph 的链接,它给了我一个起点)我找到了解决方案。

    基本上我需要做的是编辑我的 DTD 以使用 2.1 版,并使用表达式 put-attribute 而不是 value put-attribute。这是tiles.xml文件的相关部分:

    <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
    
    <definition name="user/view" extends="baseLayout">
        <put-attribute name="title" expression="FitterBlog | ${user.username}" />
        <put-attribute name="body" value="/WEB-INF/jsp/user/view.jsp" />
    </definition>
    

    【讨论】:

      【解决方案2】:

      查看这部分磁贴文档:Expression Language support

      看来您需要先启用 EL-Support。

      我知道这不是一个完整的解决方案,但我希望这个提示有助于解决问题。 -- 如果有帮助,请发布您找到的解决方案。

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多