Статьи

MVC 1.0 в Java EE 8: начало работы с использованием facelets

MVC 1.0 — это основанная на действии веб-инфраструктура Model-View-Controller, которая станет частью будущей Java EE 8. Она будет жить бок о бок с компонентной структурой JSF и предоставит альтернативу для создания приложений, ориентированных на HTML + javascript. с полным контролем над URL.

В этой статье кратко излагается, что нужно сделать, чтобы использовать Facelets вместо JSP по умолчанию в качестве технологии представления для инфраструктуры MVC.

Вступление

Хотя MVC является новой новой платформой, используемая в большинстве примеров технология представления по умолчанию — JSP — довольно старая и иногда громоздкая. С другой стороны, старший брат JSF уже опирается на более современные и гибкие Facelets.

К счастью, инфраструктура MVC была разработана для поддержки множества альтернативных технологий просмотра, включая Facelets.

Начиная

Хотя Java EE 8 еще не выпущена, можно использовать среду MVC уже на некоторых серверах Java EE 7, поскольку эталонная реализация спецификации MVC под названием Ozark уже почти завершена.

Сообщается, что Озарк работает с серверами приложений Glassfish 4.1.1 и Payara 4.1 . Я рекомендую запустить приложение на одном из них, в противном случае вы рискуете некоторые глюки тут и там.

До выхода Java EE 8 необходимо добавить зависимость от артефакта ozark maven с compile области видимости по умолчанию поверх API Java EE 7:

Зависимости в pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-web-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.glassfish.ozark</groupId>
  <artifactId>ozark</artifactId>
  <version>1.0.0-m02</version>
  <scope>compile</scope>
</dependency>

Это все, что нужно для настройки проекта. Теперь вы готовы использовать новую инфраструктуру MVC с Java EE!

контроллер

Каркас MVC построен на основе JAX-RS и интегрируется с CDI и Bean Validation. Следовательно, MVC Controller — это ресурс JAX-RS, аннотированный @javax.mvc.annotation.Controller :

HeloController.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
@Path("/hello")
@Controller
@RequestScoped
public class HelloController {
  
    @Inject
    private Models model;
     
    @GET
    public String doGet() {
        model.put("hello", "Hello MVC 1.0");
         
        return "hello.xhtml";
    }
}

Контроллер содержит бизнес-логику и склеивает модель с видом в результате.

Представление просто идентифицируется строкой, возвращаемой из действия контроллера. Чтобы использовать Facelets, достаточно указать путь, который будет сопоставлен с сервлетом Facelets (мы условно используем суффикс xhtml ).

Модель представлена ​​введенным объектом Models .

Несколько вещей, чтобы отметить здесь. Во-первых, поскольку контроллер является ресурсом JAX-RS, необходимо также создать конфигурацию приложения JAX-RS — класс, расширяющий javax.ws.rs.core.Application .

Во-вторых, если вы не включите beans.xml со all режимом обнаружения bean-компонентов , вам нужно пометить свой контроллер аннотацией, определяющей область действия, например @RequestScoped , чтобы включить CDI-инъекцию Models .

модель

Модель состоит из объектов, идентифицированных ключами String , которые превращаются в переменные на странице просмотра.

Есть 2 способа определения модели. Первый — внедрить javax.mvc.Models в контроллер, который фактически является картой. Затем действие контроллера помещает объекты в внедренную модель под ключами String .

JSP и Facelets также поддерживают произвольные компоненты CDI, помеченные квалификатором @Named CDI. Таким образом, вы можете превратить любой компонент CDI в модель, просто поместив на @Named аннотацию @Named .

Посмотреть

А теперь суть этого поста — мы будем использовать грани для отображения данных в нашей модели. На самом деле, использование Facelets в качестве технологии просмотра так же просто, как и использование JSP. Требуется только правильно настроить сервлет Facelets.

Конфигурация FacesServlet в web.xml

1
2
3
4
5
6
7
8
9
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

FacesServlet должен быть сопоставлен с *.xhtml . Все xhtml страницы должны находиться в папке WEB-INF/views внутри веб-приложения, где инфраструктура MVC ищет файлы представлений.

Вот и все! Теперь вы можете начать писать страницы, используя Facelets и ссылаться на них по пути, который заканчивается в xhtml .

Пример страницы Hello Facelet:

hello.xhtml

01
02
03
04
05
06
07
08
09
10
11
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h1>#{hello}</h1>
    </h:body>
</html>

Чтобы отобразить hello.xhtml, просто верните "hello.xhtml" из действия контроллера, и все готово.

Резюме

Начать работу с MVC-фреймворком очень легко, если вы поймете основы JAX-RS и CDI. Единственное требование — запускать ваше приложение на одном из серверов приложений, которые поддерживают эталонную реализацию Ozark. Также очень легко использовать различные технологии представления в качестве альтернативы JSP по умолчанию.

Инфраструктура MVC включает поддержку многих технологий просмотра и позволяет подключать другие технологии поверх нее. Настройка Facelets требуется только для настройки сервлета Faces в web.xml — то же самое, что вам нужно сделать при настройке JSF.

Этот пост был вдохновлен другим постом Беннет Шульц . Посетите его блог, если вы хотите узнать больше о новой платформе MVC.