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);
}
正如您所看到的,我仍处于繁重的开发阶段,目前我自己在用户对象上设置用户名(而不是从数据库中获取用户名),但这不是重点。
答案 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。
我知道这不是一个完整的解决方案,但我希望这个提示有助于解决问题。 - 如果有帮助,请发布您找到的解决方案。