Spring + Tiles2 - 来自模型的put-attribute?

时间:2012-01-04 07:03:04

标签: spring-mvc views tiles

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

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

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中相同的语法来显示用户名。即。我尝试使用$ {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);
}

正如您所看到的,我仍处于繁重的开发阶段,目前我自己在用户对象上设置用户名(而不是从数据库中获取用户名),但这不是重点。

2 个答案:

答案 0 :(得分:2)

在阅读了几个不同的网站后(同样,感谢链接Ralph,它给了我一个开始的地方)我找到了解决方案。

基本上我需要做的是编辑我的DTD以使用版本2.1,并使用表达式put-attribute而不是值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>

答案 1 :(得分:0)

请参阅磁贴文档的这一部分:Expression Language support

看起来你需要先启用EL-Support。

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