Spring + Tiles2 - поставить атрибут из модели? - PullRequest
1 голос
/ 04 января 2012

tl; dr - я хочу установить атрибут 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);
}

Как вы можете видеть, я все еще в тяжелой разработке и в настоящее время сам задаю имя пользователя для объекта пользователя (вместо того, чтобы получать его из базы данных), но это не относится к делу.

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Прочитав несколько разных сайтов (также, спасибо за ссылку Ralph, она дала мне место для начала), я нашел решение.

В основном мне нужно было отредактировать DTD для использованияверсии 2.1, а также использовать выражение put-атрибут вместо значения 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>
0 голосов
/ 04 января 2012

См. Эту часть документации по плиткам: Поддержка языка выражений

Похоже, вам сначала нужно включить поддержку EL.

Я знаюэто не полное решение, но я надеюсь, что этот совет поможет решить проблему.- Если это поможет, опубликуйте решение, которое вы нашли.

...