Spring MVC — интеграция с JSF

Рассмотрим пример создания простого приложения «Hello World» с использованием Spring MVC и JSF 2.0. В статье будет показаны базовые настройки для создания и запуска проекта .

Используемые технологии:

  • Spring MVC 4.1.5
  • JSF 2.0
  • Maven 3.2.5
  • IntelliJ IDEA 14.1.4
  • JDK 1.8

1. Структура проекта

Структура проекта Spring MVC Hello World

2. Создаем проект maven

Просто жмем Next

Spring MVC создание проекта

файл pom.xml

Вначале добавляются три зависимости spring, затем идут стандартные зависимости для приложений J2EE.

3. Добавляем поддержку фреймворков Spring MVC и JSF

Добавление фрейморков

Если в maven все зависимости загрузились успешно, то IDEA предложит использовать библиотеки maven как для JSF, так и для Spring.

4. Настраиваем web.xml

Комментарии в коде поясняют значения настроек.

Файл application-context.xmlсозданный по умолчанию, оставляем пустым. Для первоначального запуска его можно не настраивать.

dispatcher-servlet.xml

Комментарии в коде говорят сами за себя, но хотелось бы отметить, что при конфигурировании префикса не стоит использовать *, т.к. в итоге получите ошибку:

faces-config.xml

В xml файле для JSF нужно указать этот класс:

org.springframework.web.jsf.el.SpringBeanFacesELResolver

без него не сработают аннотации Spring @Controller и будет выходить ошибка

Target Unreachable, identifier 'controllerName' resolved to null .

application-context.xml

5. Контроллер Spring

Изначально мы помечаем класс аннотацией Spring @Controller. После этого все методы удовлетворяющие условиям будут видны в <context:component-scan> (из настроек выше). Теперь немного о методах:

На странице login.xhtml есть две кнопки p:commandButton, у одной из которых установлены такие атрибуты

<p:commandButton action="#{indexController.exampleClick}" value="OK"/>

После нажатия будет вызван метод indexController.exampleClick(), который вернет строковое значение следующего «view».

Если попробовать вбить в браузере URL http://localhost:8080/secondPage,

то запрос будет перехвачен здесь:

и произойдет переход на параметр установленный в методе.

*Отмечу, что это просто пример для понимания базовых процессов JSF+Spring MVC и не стоит его принимать как за базу проектирования веб-приложений.

6. Запуск приложения

Для начала добавим сервер приложений Tomcat 8.0.20. Каких либо настроек не требуется. Единственное нужно добавить артефакт нашего приложения.

2 HelloWorld Tomcat

Запускаем приложение и переходим на страницу login.xhtml, указанную в атрибуте <welcome-file-list> файла web.xml.

Spring MVC форма авторизации

Spring MVC вторая страница

 

Исходные коды

SpringMVC_HelloWorld

Share Button
3
9019 Total Views 2 Views Today

8 thoughts on “Spring MVC — интеграция с JSF

  1. Виталий:

    Спасибо за статью, но у меня этот пример почему-то не заработал. Вроде всё как у вас, а получаю ошибку 404

    The requested resource is not available

    Скачал ваш проект — работает.

    Сравнил проекты, подогнал свой под ваш (я делал всё по статье, но обнаружилось немало отличий), но всё равно не работает.

    Буду благодарен, если посмотрите на мой проект и  укажите на ошибку.

    мой проект

    1. Nick:

      Скачал ваш проект и запустил как есть.
      Единственное что пришлось поправить: Project Structure-Project-JDK Invalid 1.7 (у меня этой версии просто нет). И поставил 7ю версию language level. (но и без этого должно у вас работать).
      Что точно нужно сделать в том, что вы прислали — удалить папку Out (с ней у меня так же 404), зайти в проект и удалить-добавить артифакт со всеми зависимостями. В присланном варианте не добавлен весь спринг и Mojara.
      После этого всё заработало с вашей версией.

      Ещё хочу добавить, что здесь пример с JSF и Spring MVC, а это конкурирующие технологии. Просто так было быстрее показать что что-то отображается. Зайдите в дебаг в контроллер и дальше ручками вбейте ссылку /secondPage — должен отработать.
      Дебаг

  2. Виталий:

     

    Спасибо, ошибка пропала. Отображаются и первая и вторая страничка. Но в отладчике в контроллере не останавливается. Правда я не делал «не добавлен весь спринг и Mojara» (потому что не знаю что и зачем добавлять).

    https://yadi.sk/d/Mr-XTNpFjNGFP

    1. Nick:

      Просто без библиотек спринга он работать и не будет. Рад что заработало:)

  3. Виталий:

    А каких библиотек спринга у меня не хватает? Сейчас у меня (см.

    VitV6Maven8v3.rar\VitV6Maven8\out\artifacts\VitV6Maven8_war_exploded\WEB-INF\lib\) вроде как есть они. Я сравнил наши pom.xml – они совпадают

    1. Nick:

      Возможно я вас огорчу, но ваш проект с предыдущей ссылки запускается как есть. Опять же, я сменил 1.7 на 1.8 Project SDK (скачайте и попробуйте с новым JDK).

      1. Виталий:

        Я установил и задал Project SDK: 1.8. Как у меня сейчас работает приложение: открывается первая страница, я ввожу имя и пароль и жму на OK, после чего открывается страничка, отображающая имя и пароль. Но всё равно отладчик не останавливается в контроллере. Что это означает? Как должно работать ваше приложение с контроллером и как без него?
        последний вариант моего проекта

        1. Nick:

          Виталий, обновил название статьи, т.к. наверное она сбивала вас с толку. Если нужно чтобы по нажатию кнопки вы видели как отрабатывает контроллер, то прочтите вот это
          https://javastudy.ru/spring-mvc/hello-world-example/

          Здесь поставьте точку в дебаге в контроллере и введите в браузер путь http://localhost:8080/secondPage и он будет перехвачен контроллером (заметьте что даже если вы только начнете набирать http://localhost:8080/se , то контроллер уже поймет что надо брать запрос:) )

Добавить комментарий