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>