Руководство по JSF PrimeFaces

Добро пожаловать в учебник по JSF Primefaces. JavaServer Faces – один из ведущих фреймворков, который используется в наши дни для реализации пользовательского интерфейса веб-приложений на Java. JSF компонентизирует веб-приложение, особенно его часть, относящуюся к интерфейсу, в том смысле, что каждый отдельный вид в JSF создан с использованием серверной структуры компонентов, которая преобразуется в HTML при рендеринге в браузере.

Учебник по JSF Primefaces

Процесс отображения в JSF проходит через то, что известно как жизненный цикл JSF. Этот учебник не предназначен для предоставления вам подробного обсуждения того, как работает жизненный цикл или как с ним работать. Это всего лишь уведомление о том, что вы должны знать о фреймворке JSF и как подготовить представление JSF для отображения. В момент написания статьи в JSF существует две основные реализации: оракловская реализация Mojarra и реализация Apache MyFaces. Появилось несколько библиотек JSF, таких как Richfaces, IceFaces, Primefaces, MyFaces и др., и одной из самых популярных и с отличной репутацией является Primefaces. Недавно Primefaces отметили свой успех, выпустив Primefaces 5, который и будет рассмотрен в этом учебнике и предстоящих уроках. Чтобы использовать Primefaces 5, вы должны установить и настроить его в своем проекте. Независимо от того, используете ли вы простой текстовый редактор или среду разработки предприятия, к концу этого учебника вы будете готовы к изучению всех компонентов Primefaces.

Что нового в JSF 2

Как мы знаем, JavaServer Faces – это фреймворк для разработки интерфейсов веб-страниц. JSF был представлен в нескольких запросах Java Community Request JSR, где окончательный релиз JSF 2 был выпущен в июле 2009 года и содержит набор улучшений и новых функций. За JSF 2 последовали ряд последствий, и последний из них был JSF 2.2, выпущенный в мае 2013 года. В отличие от JSF 1.x, JSF 2.x имеет множество функций, таких как использование аннотаций для объявления управляемых бинов JSF, преобразователей, валидаторов, областей видимости и т. д. Это еще не весь рассказ, JSF 2 предоставил новые области видимости, такие как Область видимости, Пользовательская область видимости, Область потока и Область разговора, и многое другое. Также нельзя забыть о самой удивительной функции, добавленной в JSF 2, – это концепция Ajax. В JSF 2 Ajax встроен непосредственно в фреймворк JSF. Таким образом, любой компонент JSF может быть аяксифицирован просто добавлением соответствующих элементов Ajax. Правила навигации также изменились и стали намного проще. Следующие уроки будут подробнее рассматривать эти функции, добавленные в JSF 2, в то время как в этом уроке вы создадите простое приложение JSF и приведете базовый пример того, как мы можем использовать теги Primefaces для реализации определенного бизнес-сценария.

Используемые инструменты для выполнения учебника

Чтобы начать изучение этого учебника, вам нужно использовать следующие инструменты разработки.

  1. Tomcat 7
  2. Среда разработки Eclipse
  3. , Maven 3
  4. , JSF 2 / Primefaces 5

. Очевидно, что мы использовали Tomcat 7 для развертывания приложения и среду разработки Eclipse для создания необходимых компонентов, где Maven использовался в качестве инструмента сборки и управления зависимостями. Так что будьте уверены, что вы знаете, как установить и настроить все эти программы на своей рабочей машине для разработки. Наш конечный проект будет выглядеть как на изображении ниже.

Создание проекта в Eclipse

Среда разработки Eclipse поддерживает разработку веб-проектов в рамках Dynamic Project. Чтобы создать динамический проект, выполните следующие шаги:

  • Откройте среду разработки Eclipse
  • Щелкните правой кнопкой мыши на области проводника проектов и выберите Новый – Динамический веб-проект

  • Завершите процесс создания проекта, установив имя проекта, целевую среду выполнения, папку исходного кода, корневой контекст, каталог контента и web.xml

Установка и настройка JSF

Как мы уже упоминали ранее, нашей целью является использование JSF/Primefaces для разработки веб-приложения, которое использует компоненты пользовательского интерфейса Primefaces. Но на данный момент у нас есть только простое динамическое приложение, которое требует дополнительных шагов для настройки JSF. Чтобы добавить JSF в ваш проект, вам нужно добавить фасет JSF и учесть, что добавление реализации JSF помогает вам создать приложение JSF, использующее Mojarra. Для добавления этой фасеты вам нужно выполнить следующие шаги:

  1. Откройте окно свойств для созданного проекта
  2. В разделе Фасеты проекта просто установите флажок JavaServer Faces и следуйте инструкциям Требуется дополнительная настройка для завершения настройки
  3. После щелчка на Требуется дополнительная настройка должно появиться окно Возможности JSF
  4. Добавьте библиотеку реализации JSF, нажав на Загрузить библиотеку и выбрав в открывшемся окне JSF 2.2 (Mojarra 2.2.0)

После установки библиотеки JSF окно Возможности JSF будет выглядеть так По окончании этой фазы у вас будет веб-приложение с возможностями JSF.

Установка Primefaces 5

В настоящее время ваше приложение готово для использования пользовательского интерфейса JavaServer Faces, но без использования Primefaces. Чтобы иметь возможность использовать Primefaces, выполните следующие шаги:

  1. Загрузите необходимую библиотеку Primefaces с официального сайта Primefaces или из центрального репозитория Maven.
  2. Включите загруженный JAR-файл Primefaces в папку lib, находящуюся внутри папки WEB-INF

Разработка приложения с использованием Primefaces

Теперь ваш проект готов к разработке приложения JSF/Primefaces, как вы увидите. Мы собираемся создать простое приложение, в котором элемент DataTable Primefaces потребляет список сотрудников из бэкенд-бина. Список сотрудников будет заполняться с использованием специального метода @PostConstruct. Следуйте указанным ниже шагам для разработки полноценного приложения JSF/Primefaces.

  1. Создайте управляемый бин с именем ViewEmployeesManagedBean
  2. Создайте POJO с именем Employee, который содержит EmployeeName и EmployeeId
  3. Создайте представление Primefaces для потребления списка сотрудников в определенном управляемом бине
package com.journaldev.data;

public class Employee {
	private String employeeId;
	private String employeeName;
	public String getEmployeeId() {
		return employeeId;
	}
	public void setEmployeeId(String employeeId) {
		this.employeeId = employeeId;
	}
	public String getEmployeeName() {
		return employeeName;
	}
	public void setEmployeeName(String employeeName) {
		this.employeeName = employeeName;
	}
}
package com.journaldev.jsfBeans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.journaldev.data.Employee;

@ManagedBean
@SessionScoped
public class ViewEmployeesManagedBean {
	private List<Employee> employees = new ArrayList<Employee>();

	public ViewEmployeesManagedBean(){

	}

	@PostConstruct
	public void populateEmployeeList(){
		for(int i = 1 ; i <= 10 ; i++){
			Employee emp = new Employee();
			emp.setEmployeeId(String.valueOf(i));
			emp.setEmployeeName("Employee#"+i);
			this.employees.add(emp);
		}
	}

	public List<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(List<Employee> employees) {
		this.employees = employees;
	}
}

Обратите внимание на использование аннотаций JSF и использование аннотации PostConstruct для заполнения списка сотрудников.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:ui="https://java.sun.com/jsf/facelets"
	xmlns:h="https://java.sun.com/jsf/html"
	xmlns:f="https://java.sun.com/jsf/core"
	xmlns:p="https://primefaces.org/ui">
<p:outputLabel value="JournalDev - JSF2/Primefaces Tutorial"></p:outputLabel>
<p:dataTable value="#{viewEmployeesManagedBean.employees}" var="employee">
	<p:column>
		<f:facet name="header">
			<h:outputText value="Employee ID"></h:outputText>
		</f:facet>
		<h:outputText value="#{employee.employeeId}"></h:outputText>
	</p:column>
	<p:column>
		<f:facet name="header">
			<h:outputText value="Employee Name"></h:outputText>
		</f:facet>
		<h:outputText value="#{employee.employeeName}"></h:outputText>
	</p:column>
</p:dataTable>
</html>

Обратите внимание на использование элемента dataTable для создания таблицы из свойств управляемого бина. PrimeFaces и JSF берут на себя передачу их на страницу представления для отображения. Если вы имеете опыт работы с Servlet, то легко заметите, что количество шагов сокращено – в среде сервлета мы сначала обрабатываем запрос в сервлете, создаем модельные данные, устанавливаем их как атрибут в запросе/сессии, а затем передаем их на страницу JSP для отображения ответа.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>JournalDev-PrimefacesWebApplication</display-name>
	<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>/faces/*</url-pattern>
	</servlet-mapping>
	<context-param>
		<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>resources.application</param-value>
	</context-param>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
</web-app>

Обратите внимание, что javax.faces.webapp.FacesServlet – это класс контроллера, здесь мы подключаем JSF к нашему веб-приложению.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="https://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

</faces-config>

Здесь мы предоставляем конфигурации компонентов JSF, такие как управляемые бины, глобальные сообщения i18n, пользовательские обработчики представлений и пользовательские классы фабрик. Поскольку мы используем аннотации и это простой проект, здесь ничего не настраивается, но мы увидим, как это используется в будущих сообщениях. Теперь, когда вы запустите это, вы получите вывод, как показано на изображении ниже.

Преобразование в Maven

Maven – самый предпочтительный способ управления сборкой и зависимостями проектов Java, поэтому здесь мы рассмотрим, как его можно преобразовать в Maven. Среда разработки Eclipse предоставляет возможность преобразовать ваш Динамический веб-проект в Maven. Maven поможет вам контролировать и управлять необходимыми зависимостями. Просто щелкните правой кнопкой мыши на созданном проекте и в меню настройки выберите Преобразовать в проект Maven. Как только вы преобразили свой проект в Maven, вам нужно добавить необходимые зависимости, чтобы проект можно было скомпилировать с помощью самого Maven. Предполагаемый XML Maven, который вы получаете после преобразования приложения в проект Maven и после добавления необходимых библиотек для JSF 2, Primefaces и других, выглядит следующим образом:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JournalDev-PrimefacesWebApplication</groupId>
	<artifactId>JournalDev-PrimefacesWebApplication</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>webapp</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
		<finalName>${project.artifactId}</finalName>
	</build>
	<repositories>
		<repository>
			<id>prime-repo</id>
			<name>PrimeFaces Maven Repository</name>
			<url>https://repository.primefaces.org</url>
			<layout>default</layout>
		</repository>
	</repositories>
	<dependencies>
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- Faces Implementation -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.2.4</version>
		</dependency>
		<!-- Faces Library -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.2.4</version>
		</dependency>
		<!-- Primefaces Version 5 -->
		<dependency>
			<groupId>org.primefaces</groupId>
			<artifactId>primefaces</artifactId>
			<version>5.0</version>
		</dependency>
		<!-- JSP Library -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.1</version>
		</dependency>
		<!-- JSTL Library -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.1.2</version>
		</dependency>
	</dependencies>
</project>

И, выполнив команду mvn clean package для проекта, вы получите готовый к развертыванию файл WAR для любого контейнера Java EE. Просто разверните и проверьте.

Сводка

Этот учебник показал, как использовать JSF 2 / Primefaces для создания пользовательского интерфейса веб-приложения. Для этого мы использовали среду разработки Eclipse, создавая динамический проект и добавляя все необходимые библиотеки, как те, которые обязательны для реализации JSF 2, так и те, которые необходимы для использования компонентов Primefaces. Следующие учебные пособия будут использовать Maven для создания проекта для наших примеров.

Скачать проект Hello World PrimeFaces

Скачайте образец проекта по ссылке выше и поиграйтесь с ним, чтобы узнать больше. Ссылка: Официальный сайт PrimeFaces

Source:
https://www.digitalocean.com/community/tutorials/jsf-primefaces-tutorial