Главная » Spring » Объявление представления главной страницы Spring

0

Как видно в листинге 8.4, главная страница конструируется из не- скольких отдельных фрагментов. Файл main_template.jsp описывает общую структуру всех страниц в приложении Spitter, тогда как home. jsp отображает лишь основное содержимое главной страницы. Плюс некоторые общие элементы, объявленные в файлах spittleForm.jsp и signinsignup.jsp.

Теперь сосредоточимся на файле home.jsp как наиболее уместном при обсуждении главной страницы. Именно в этой странице JSP за- вершается путешествие запроса. Она принимает список сообщений, которые контроллер HomeController поместил в модель, и отображает их в веб-странице. В листинге 8.5 представлено содержимое файла home.jsp.

Листинг 8.5. Элемент <div> главной страницы, вставляемый в шаблон

<%@    taglib   prefix="c"   uri="http://java.sun.com/jsp/jstl/core"   %>

<%@     taglib    prefix="s"    uri="http://www.springframework.org/tags"%>

<%@     taglib    prefix="t"    uri="http://tiles.apache.org/tags-tiles"%>

<%@   taglib   prefix="fmt"   uri="http://java.sun.com/jsp/jstl/fmt"%>

<div>

<h2>A  global  community  of  friends  and  strangers  spitting  out  their inner-most  and  personal  thoughts  on  the  web  for  everyone  else  to see.</h2>

<h3>Look  at  what  these  people  are  spitting  right  now…</h3>

<ol  class="spittle-list">

<c:forEach  var="spittle"  items="${spittles}">  <!–  Цикл  по  списку  сообщений  –>

<s:url  value="/spitters/{spitterName}"

var="spitter_url" >             <!– Конструирование URL-сообщения –>

<s:param  name="spitterName"

value="${spittle.spitter.username}"  />

</s:url>

<li>

<span  class="spittleListImage">

<img src= "http://s3.amazonaws.com/spitterImages/${spittle.spitter.id}.jpg"

width="48" border="0" align="middle" onError=

"this.src=’<s:url    value="/resources/images"/>/spitter_avatar.png’;"/>

</span>

<span class="spittleListText">

<a  href="${spitter_url}">        <!–  Отображение  свойств  сообщения  –>

<c:out value="${spittle.spitter.username}" /></a>

- <c:out value="${spittle.text}" /><br/>

<small><fmt:formatDate   value="${spittle.when}"

pattern="hh:mma  MMM  d,  yyyy"  /></small>

</span>

</li>

</c:forEach>

</ol>

</div>

Основная работа в файле home.jsp, помимо вывода нескольких приветственных сообщений в начале, выполняется в теге <c:forEach>, который в цикле обходит список сообщений и отображает инфор- мацию о каждом из них. Поскольку сообщения (объекты Spittle) находятся внутри модели с ключом spittles, ссылка на список может быть получена с использованием конструкции ${spittles}.

Атрибуты модели и запроса: взгляд изнутри. В примере выше этого не видно, но конструкция ${spittles} в файле home.jsp ссылается на серв- лет атрибута запроса с именем spittles. После того, как HomeController выполнит свою работу, и перед тем, как управление будет передано странице home.jsp, контроллер DispatcherServlet скопирует все элементы модели в атрибут запроса с тем же именем.

Обратите внимание на тег <s:url> в середине файла. Здесь этот тег используется для создания сервлета относительного URL-сооб- щения в приложении Spitter. Тег <s:url> появился в версии Spring

3.0 и действует подобно JSTL-тегу <c:url>.

Главное отличие между тегами <s:url> и <c:url> состоит в том, что <s:url> поддерживает параметризованные пути в адресах URL. В данном случае путь параметризуется именем пользователя прило- жения Spitter. Например, если предположить, что пользователь при-

ложения Spitter имеет имя habuma, а сервлет контекста имеет имя

Spitter, тогда в результате получится путь /Spitter/spitters/habuma.

При отображении эта страница JSP будет скомпонована с дру- гими страницами JSP, объявленными в том же определении Tiles, в результате получится главная страница приложения Spitter, как показано на рис. 8.4.

Рис. 8.4. Главная страница приложения Spitter с приветствием и списком последних сообщений

К настоящему моменту мы создали первый контроллер Spring MVC, настроили арбитр представлений и определили простое представление JSP для отображения результатов обращения к контроллеру. Но оста- лась одна маленькая проблема. В контроллере HomeController нас подка- рауливает исключение, потому что DispatcherServlet понятия не имеет, где искать компонент SpitterService. К счастью, это легко исправить.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии