Spring + Tiles2-模型的归因属性?


问题内容

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

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

tile.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);
}

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


问题答案:

在阅读了几个不同的站点之后(也感谢Ralph的链接,它为我提供了一个起点),我找到了解决方案。

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