Spring + Tiles2 - 模型的放置属性? [英] Spring + Tiles2 - put-attribute from model?

查看:33
本文介绍了Spring + Tiles2 - 模型的放置属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

tl;dr - I want to set a put-attribute in my tiles definitions based on the individual model passed to a view in tiles

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

I'm trying to create a page to display a user using spring and tiles. Right now my page gets the model fine, but I want the title of the page to include the username (which it would have to get from the model). I've included some excerpts from my code below:

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 中相同的语法来显示用户名.IE.我尝试使用 ${user.username} 来显示用户名,但是这不起作用,我只是在标题中显示文本${user.username}"而不是实际用户名.

As you can see, I've tried using the same syntax as I would in a jsp to display the username. ie. I tried using ${user.username} to display the username, however that doesn't work and I just get the text "${user.username}" displayed in the title instead of the actual username.

display.jsp:

display.jsp:

//output the username from the user model, this works fine
${user.username}

UserController.java

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

如您所见,我仍在大量开发中,目前我自己在用户对象上设置了用户名(而不是从数据库中获取),但这不是重点.

as you can see, I'm still in heavy development and currently set the username on the user object myself (instead of getting it from the database), but that's beside the point.

推荐答案

在阅读了几个不同的网站(另外,感谢 Ralph 的链接,它给了我一个起点)后,我找到了一个解决方案.

After reading a few different sites (also, thanks for the link Ralph, it gave me a place to start) I have found a solution.

基本上我需要做的是编辑我的 DTD 以使用 2.1 版并使用表达式 put-attribute 而不是值 put-attribute.这是tiles.xml文件的相关部分:

Basically what I needed to do was edit my DTD to use version 2.1 and also to use an expression put-attribute instead of a value put-attribute. Here is the relevant part to the tiles.xml file:

<!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>

这篇关于Spring + Tiles2 - 模型的放置属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆