2012-01-04 29 views
1

tl; dr - 我想在我的瓷砖定义中设置放置属性,基于传递到瓷砖视图的个别模型Spring + Tiles2 - 从模型中放置属性?

我试图创建一个页面来显示使用弹簧和瓷砖的用户。现在我的网页得到的模型很好,但我希望页面的标题包含用户名(它必须从模型中获得)。我已经包括从下面我的代码的一些摘录:

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

读了几个不同的网站后(也,感谢您的链接拉尔夫,它给了我开始的地方),我已经找到了解决办法。

基本上,我需要做什么修改我的DTD使用2.1版本,并且还要用放属性的表达,而不是一个值放在属性。以下是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> 
0

见瓷砖文档的这一部分:Expression Language support

看起来你需要首先使EL-支持。

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