Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Java Server Faces. (Лекция 20)

Содержание

Java Server FacesПодобно Swing и AWT, JSF представляет собой каркас разработки приложений, предоставляющий набор стандартных графических компонентов для создания интерфейсов. Но при этом JSF ориентирована на создание Web-приложений.
Лекция 20 Java Server FacesПодобно Swing и AWT, JSF представляет собой каркас разработки приложений, Компонентная архитектура JSF предоставляет описываемые тегами компоненты, соответствующие всем полям ввода в JSF и JSP Интерфейс JSF-приложения состоит из страниц JSP, которые содержат компоненты, JSF не имеет непосредственного отношения к JSP: она лишь использует JSP через Жизненный цикл приложения JSF.Фазы жизненного цикла:1. Восстановление представления 2. Использование параметров запроса; На каждом этапе возможна обработка событий. При этом фазы не обязательно следуют Фаза 1: Восстановление представления В первой фазе обработки — этапе восстановления представления Существуют три типа представлений, с которыми приходится иметь дело на данном этапе:1.новое2.изначальное3.повторноеВ Этот объект служит для хранения информации, необходимой для управления состоянием компонентов GUI Изначальное представление означает, что данная страница вызывается впервые. В этом случае JSF Фаза 2: Использование данных запроса Главной задачей данного этапа является получение данных Фаза 3: Проверка данных Конвертация и валидация данных, как правило, выполняются в Фаза 4: Обновление модели В четвертой фазе жизненного цикла JSF происходит обновление Фаза 5: Вызов приложения В этой фазе контроллер JSF вызывает приложение для Фаза 6: Вывод результата В заключительной фазе цикла происходит вывод представления вместе Описание и отображение сервлета FacesПеред использованием Faces-сервлета необходимо объявить его в файле Сервлет должен вызываться на каждый запрос со страниц JSP, на которых используется Согласно отображению в web.xml, JSF контейнер будет вызывать сервлет Faces для обработки Создание класса Calculator Класс реализующий соответствующую бизнес логику имеет вид:package aaa; public public int getFirstNumber() { return firstNumber; } public void setFirstNumber(int firstNumber) Объявление объекта Calculator в файле faces-config.xml Для объявления управляемых объектов JavaBean служит Объявление управляемого объекта состоит из двух частей: имени объекта — calculator —, В jsf 2 и выше можно не использовать файл faces-config.xml а вместо Создание страницы index.jspСтраница index.jsp необходима, чтобы гарантировать, что calculator.jsp будет загружена в Calculator Application Calculator Results     First Number ${calculator.firstNumber} Рассмотрим данную страницу подробнее.Объявление библиотек тегов.Написание страницы начинается с объявления библиотек тегов Если необходимо явно указать, что для работы с элементами интерфейса будет использоваться Тег указывает JSF, что в этом месте необходима форма HTML. Во Соответствующий HTML код будет иметь вид: Рассмотрим пример: Соответствующий HTML код будет иметь вид: Результаты операций сложения и умножения выводятся внутри тега с помощью элемента .Можно Развертывание и запуск приложения.Предположим, что Tomcat установлен в папке C:\tomcatТогда развертывание будет 5. Поместить файлы web.xml и faces-config.xml в каталог Использование компонента Рассмотрим обновленную версию формы для ввода данных:  Calculator Компонент может содержать только дочерние компоненты, в отличие от , и , Оформление интерфейса с помощью CSS CSS можно использовать вместе с . Для Таблица стилей имеет вид:.oddRow { background-color: white; } .evenRow { background-color: silver; Чтобы применить стили к строкам таблицы необходимо установить значение атрибута rowClasses в Тогда в браузере получим: Глобальное управление сообщениямиСообщениями можно управлять глобально, для этого следует определить набор ресурсов При этом необходимо определить файл message.properties:javax.faces.component.UIInput.REQUIRED=required javax.faces.converter.IntegerConverter Добавление контроллера Добавим метод деления в класс calculatorpublic class Calculator { Создадим класс-контроллер CalculatorController, содержащий ссылку на класс Calculator.CalculatorController также связан с тремя package aaa; import javax.faces.application.FacesMessage;import javax.faces.component.UIInput; import javax.faces.component.UIPanel; import javax.faces.context.FacesContext; public class CalculatorController public String add() {  FacesContext facesContext = FacesContext.getCurrentInstance();  try { public String multiply() {  FacesContext facesContext = FacesContext.getCurrentInstance();  try { public String divide() {   FacesContext facesContext = FacesContext.getCurrentInstance(); public String clear() { FacesContext facesContext = FacesContext.getCurrentInstance(); try { public String getFirstNumberStyleClass() {   if (firstNumberInput.isValid()) { JSF предоставляет средства для показа сообщений пользователям о статусе той или иной Например, в методе add() в FacesContext добавляются сообщения, которые должны быть доступны В данном примере сообщения представляют собой объекты класса FacesMessage, добавляемые в объект errorClass – атрибут устанавливает CSS стиль, который будет применяться для сообщений уровня Страница calculator.jsp будет иметь следующий вид (на этой странице осуществляется привязка firstNumber Results Описание контроллера в файле  faces-config.xml имеет вид: request     calculator    #{calculator} Поскольку в данном случае объект calculator будет доступен только через внешний объект Объект calculatorController будет помещен в область видимости request. При этом ссылка на calculatorController Объект calculator используется классом CalculatorController, но при этом сам остается “чистым”, т.е. В случае jsf 2 можно использовать аннотации@ManagedBean(name= @ManagedBean(name=
Слайды презентации

Слайд 2 Java Server Faces
Подобно Swing и AWT, JSF представляет

Java Server FacesПодобно Swing и AWT, JSF представляет собой каркас разработки

собой каркас разработки приложений, предоставляющий набор стандартных графических компонентов

для создания интерфейсов.
Но при этом JSF ориентирована на создание Web-приложений.

Слайд 3 Компонентная архитектура
JSF предоставляет описываемые тегами компоненты, соответствующие

Компонентная архитектура JSF предоставляет описываемые тегами компоненты, соответствующие всем полям ввода

всем полям ввода в стандартном HTML.
Кроме этого можно

создавать специальные компоненты для нужд приложения.
Все компоненты могут сохранять свое состояние – это поддерживается на уровне самой технологии JSF.
Кроме этого компоненты используются для динамической генерации HTML-страниц.
Являясь компонентной архитектурой, JSF легко расширяется и конфигурируется.
Большинство функций JSF, например, навигация или управление объектами JavaBean, могут быть реализованы встраиваемыми компонентами.

Слайд 4 JSF и JSP
Интерфейс JSF-приложения состоит из страниц

JSF и JSP Интерфейс JSF-приложения состоит из страниц JSP, которые содержат

JSP, которые содержат компоненты, обеспечивающие функциональность интерфейса.
При этом

нельзя сказать, что JSF неразрывно связана с JSP, т.к. теги, используемые на JSP-страницах всего лишь отрисовывают компоненты, обращаясь к ним по имени. Жизненный же цикл компонентов JSF не ограничивается JSP-страницей.



Слайд 5 JSF не имеет непосредственного отношения к JSP: она

JSF не имеет непосредственного отношения к JSP: она лишь использует JSP

лишь использует JSP через специальную библиотеку тегов – своего

рода мост. Жизненный цикл компонент JSF сильно отличается от цикла JSP-страниц.

Слайд 6 Жизненный цикл приложения JSF.
Фазы жизненного цикла:
1. Восстановление представления

Жизненный цикл приложения JSF.Фазы жизненного цикла:1. Восстановление представления 2. Использование параметров


2. Использование параметров запроса; обработка событий
3. Проверка данных;

обработка событий
4. Обновление данных модели; обработка событий
5. Вызов приложения; обработка событий
6. Вывод результата


Слайд 7 На каждом этапе возможна обработка событий.
При этом

На каждом этапе возможна обработка событий. При этом фазы не обязательно

фазы не обязательно следуют одна за другой в строго

установленном порядке.
Более того, отдельные фазы можно пропускать или вовсе прерывать цикл.
Таким образом, схема жизненного цикла имеет вид:



Слайд 9 Фаза 1: Восстановление представления
В первой фазе обработки

Фаза 1: Восстановление представления В первой фазе обработки — этапе восстановления

— этапе восстановления представления — запрос поступает на вход

сервлета FacesServlet.
Последний анализирует данные запроса и извлекает идентификатор представления, определяемый именем страницы JSP.
Идентификатор используется контроллером JSP для поиска компонентов, ассоциированных с данным представлением.
Если оно не существует, то контроллер создаст его, если существует - будет использовать существующее.
Представление содержит в себе все необходимые компоненты графического интерфейса.

Слайд 10 Существуют три типа представлений, с которыми приходится иметь

Существуют три типа представлений, с которыми приходится иметь дело на данном

дело на данном этапе:
1.новое
2.изначальное
3.повторное
В случае нового представления JSF создает

представление страницы Faces и связывает компоненты с обработчиками событий и валидаторами данных.
Затем оно сохраняется в объекте FacesContext.


Слайд 11 Этот объект служит для хранения информации, необходимой для

Этот объект служит для хранения информации, необходимой для управления состоянием компонентов

управления состоянием компонентов GUI в процессе обработки запросов.
FacesContext

сохраняет состояние в свойстве viewRoot.
Данное свойство содержит все компоненты JSF, ассоциированные с данным идентификатором представления.



Слайд 12 Изначальное представление означает, что данная страница вызывается впервые.

Изначальное представление означает, что данная страница вызывается впервые. В этом случае


В этом случае JSF создает пустое представление, которое заполняется

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

Слайд 13 Фаза 2: Использование данных запроса
Главной задачей данного

Фаза 2: Использование данных запроса Главной задачей данного этапа является получение

этапа является получение данных о состоянии каждого компонента.
Сами

компоненты хранятся или создаются внутри объекта FacesContext вместе со своими значениями.
Значения компонентов, как правило, приходят в параметрах запроса, хотя могут извлекаться также из cookies и заголовков запроса.
Многие компоненты сохраняют значения параметра запроса в свойстве submittedValue.

Слайд 14 Фаза 3: Проверка данных
Конвертация и валидация данных,

Фаза 3: Проверка данных Конвертация и валидация данных, как правило, выполняются

как правило, выполняются в фазе проверки данных.
Компонент конвертирует

и сохраняет значение свойства submittedValue.
Например, если данное поле связано со свойством типа Integer, то значение будет преобразовано к типу Integer.
Если конвертация проходит неудачно, создается соответствующее сообщение об ошибке, направляемое в очередь FacesContext для последующего вывода в фазе отрисовки результата.

Слайд 15 Фаза 4: Обновление модели
В четвертой фазе жизненного

Фаза 4: Обновление модели В четвертой фазе жизненного цикла JSF происходит

цикла JSF происходит обновление данных модели путем изменения свойств

серверных объектов JavaBean.
Обновляются только те свойства, которые привязаны к значениям компонентов.


Слайд 16 Фаза 5: Вызов приложения
В этой фазе контроллер

Фаза 5: Вызов приложения В этой фазе контроллер JSF вызывает приложение

JSF вызывает приложение для обработки данных, полученных через форму.


Значения компонентов уже преобразованы к нужным типам, валидированы и сохранены в объектах модели.
Теперь их можно использовать для выполнения бизнес-логики приложения.

Слайд 17 Фаза 6: Вывод результата
В заключительной фазе цикла

Фаза 6: Вывод результата В заключительной фазе цикла происходит вывод представления

происходит вывод представления вместе со всеми его компонентами и

их текущими состояниями.
Теперь рассмотрим примеры JSF приложений.
Пример 1. Web калькулятор.
Необходимо создать Web калькулятор, который умеет выполнять простые арифметические операции.
Для начала главной задачей будет создание простого Web-калькулятора, интерфейс которого представляет собой страницу, предлагающую пользователю ввести два числа для последующего сложения или умножения.

Слайд 18 Описание и отображение сервлета Faces
Перед использованием Faces-сервлета необходимо

Описание и отображение сервлета FacesПеред использованием Faces-сервлета необходимо объявить его в

объявить его в файле web.xml

Faces Servlet

class>
javax.faces.webapp.FacesServlet

Данный тег означает, что сервлет будет загружен первым
1


Слайд 19 Сервлет должен вызываться на каждый запрос со страниц

Сервлет должен вызываться на каждый запрос со страниц JSP, на которых

JSP, на которых используется тег .
Для этого необходимо добавить

отображение сервлета (servlet mapping), указывающее, что через него должны загружаться только JSP-страницы, использующие JSF.

Faces Servlet
*.jsf


Faces Servlet
/faces/*


Слайд 20 Согласно отображению в web.xml, JSF контейнер будет вызывать

Согласно отображению в web.xml, JSF контейнер будет вызывать сервлет Faces для

сервлет Faces для обработки всех запросов, относительный URI которых

начинается с /faces/ или заканчивается на *.jsf.
Благодаря этому будет корректно инициализироваться контекст Faces и корневой элемент представления перед показом страниц JSF.
Таким образом, URL для загрузки Калькулятора должен быть либо
http://localhost:8080/calculator/calculator.jsf
либо
http://localhost:8080/calculator/faces/calculator.jsp

Слайд 21 Создание класса Calculator
Класс реализующий соответствующую бизнес логику

Создание класса Calculator Класс реализующий соответствующую бизнес логику имеет вид:package aaa;

имеет вид:
package aaa;
public class Calculator{
private

int firstNumber = 0;
private int result = 0;
private int secondNumber = 0;

public void add(){
result = firstNumber + secondNumber;
}

public void multiply() {
result = firstNumber * secondNumber;
}

public void clear() { result = 0; }

Слайд 22 public int getFirstNumber() { return firstNumber; }

public int getFirstNumber() { return firstNumber; } public void setFirstNumber(int

public void setFirstNumber(int firstNumber) {

this.firstNumber = firstNumber; }

public int getResult() { return result; }

public void setResult(int result) { this.result = result; }

public int getSecondNumber() {
return secondNumber;
}

public void setSecondNumber(int secondNumber) {
this.secondNumber = secondNumber;
}
}

Слайд 23 Объявление объекта Calculator в файле faces-config.xml
Для объявления

Объявление объекта Calculator в файле faces-config.xml Для объявления управляемых объектов JavaBean

управляемых объектов JavaBean служит элемент .
Файл faces-config.xml имеет вид:

version="1.0" encoding="UTF-8"?>
"http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">


calculator

com.arcmind.jsfquickstart.model.Calculator

request



Слайд 24 Объявление управляемого объекта состоит из двух частей: имени

Объявление управляемого объекта состоит из двух частей: имени объекта — calculator

объекта — calculator —, задаваемого с помощью элемента ,

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

Слайд 25 В jsf 2 и выше можно не использовать

В jsf 2 и выше можно не использовать файл faces-config.xml а

файл faces-config.xml а вместо него использовать аннотации.
Т.е. в файле

calculator.java написать:
@ManagedBean(name="calculator")
@RequestScoped
public class Calculator {
…………………
}

Слайд 26 Создание страницы index.jsp
Страница index.jsp необходима, чтобы гарантировать, что

Создание страницы index.jspСтраница index.jsp необходима, чтобы гарантировать, что calculator.jsp будет загружена

calculator.jsp будет загружена в контексте JSF.
Сама страница имеет

вид:


Создание страницы calculator.jsp
Данная страница занимает центральное место в слое представления Калькулятора.
Страница содержит элементы для ввода двух чисел.
Данная страница имеет вид:

Слайд 27

Calculator Application

taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd">


Calculator Application



Слайд 28

Calculator

Calculator



for="firstNumber" />

value="#{calculator.firstNumber}"
required="true" />




Слайд 29

for="secondNumber" />
value="#{calculator.secondNumber}“ required="true" />





Слайд 30

value="Add" />
value="Multiply" />
value="Clear" immediate="true"/>



Слайд 31
Results

Results    First Number ${calculator.firstNumber}


First Number ${calculator.firstNumber}



Second Number ${calculator.secondNumber}


Result ${calculator.result}







Слайд 32 Рассмотрим данную страницу подробнее.
Объявление библиотек тегов.
Написание страницы начинается

Рассмотрим данную страницу подробнее.Объявление библиотек тегов.Написание страницы начинается с объявления библиотек

с объявления библиотек тегов для JSF


prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core"
prefix="f" %>
Библиотека html включает в себя теги для работы с формами и другими элементами HTML.
Все теги, реализующие логику, валидацию данных, контроллер и т.д., включены в библиотеку core.

Слайд 33
Если необходимо явно указать, что для работы с

Если необходимо явно указать, что для работы с элементами интерфейса будет

элементами интерфейса будет использоваться JSF, то для этого используется

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

...


Слайд 34
Тег указывает JSF, что в этом

Тег указывает JSF, что в этом месте необходима форма HTML.

месте необходима форма HTML.
Во время отрисовки страницы JSF

находит ранее созданные дочерние компоненты формы и вызывает их методы для генерации соответствующего HTML-кода.
Тег задает метку для соответствующего поля ввода.
Рссмотрим пример

for="firstNumber" />
value="#{calculator.firstNumber}" />


Слайд 35 Соответствующий HTML код будет иметь вид:

Соответствующий HTML код будет иметь вид:

method="post"

action="/calculator/calculator.jsf“>

name=" calcForm:firstNumber" type="text“ value=""/>


Слайд 36
Рассмотрим пример:

Рассмотрим пример: Соответствующий HTML код будет иметь вид:

value="#{userBean.user.username}"
errorStyle="color:red" />

Соответствующий HTML код будет иметь вид:
name="form:username" value="" />
"username": Value is
required.


Слайд 37
Результаты операций сложения и умножения выводятся внутри тега

Результаты операций сложения и умножения выводятся внутри тега с помощью элемента

с помощью элемента .
Можно свободно использовать выражения JSP

внутри .
Кроме того, аналогично другим компонентам JSF этот тег содержит атрибут rendered, управляющий выводом содержимого.
Таким образом, секция отображения результата выводится только если значением выражения calculator.result != 0 is является true.

Слайд 38 Развертывание и запуск приложения.
Предположим, что Tomcat установлен в

Развертывание и запуск приложения.Предположим, что Tomcat установлен в папке C:\tomcatТогда развертывание

папке
C:\tomcat
Тогда развертывание будет иметь вид:
1. Создать директорию calculator

в папке c:\tomcat\webapps\
2. В директории calculator создать папку WEB-INF
3. В WEB-INF создать директорию classes, а в ней папку aaa
4. Скомпилировать, используя javac Calculator.java и поместить файл Calculator.class в папку c:\tomcat\webapps\calculator\WEB-INF\classes\aaa\


Слайд 39 5. Поместить файлы web.xml и faces-config.xml в каталог

5. Поместить файлы web.xml и faces-config.xml в каталог


c:\tomcat\webapps\calculator\WEB-INF\
6. Поместить

файлы index.jsp и calculator.jsp в каталог c:\tomcat\webapps\calculator\
7. Скачать пакет mojarra по адресу https://javaserverfaces.dev.java.net/ и скопировать оттуда файлы jsf-impl.jar и
jsf-api.jar в каталог c:\tomcat\lib\, а также скопировать в этот же каталог пакеты
jstl.jar и standard.jar.
8. Запуск приложения: http://localhost:8080/calculator/calculator.jsf
Тогда в браузере получим:

Слайд 41 Использование компонента
Рассмотрим обновленную версию формы для

Использование компонента Рассмотрим обновленную версию формы для ввода данных: Calculator

ввода данных:

Calculator


value="#{calculator.firstNumber}" required="true" />


value="#{calculator.secondNumber}" required="true" />




Слайд 42 Компонент может содержать только дочерние компоненты, в

Компонент может содержать только дочерние компоненты, в отличие от , и

отличие от , и , внутрь которых можно

также помещать обычные фрагменты HTML.
Данный элемент на странице включает в себя три колонки, поэтому добавление более трех дочерних компонентов приведет к появлению новой строки.
Например, если написать

То в браузере получим



Слайд 44 Оформление интерфейса с помощью CSS
CSS можно использовать

Оформление интерфейса с помощью CSS CSS можно использовать вместе с .

вместе с . Для этого нужно импортировать таблицу CSS

и можно начинать использовать стили внутри .
Прежде всего необходимо объявить импортирование таблицы стилей

Calculator Application
href="/<%=request.getContextPath()%>
/css/main.css" />


Слайд 45 Таблица стилей имеет вид:
.oddRow { background-color: white; }

Таблица стилей имеет вид:.oddRow { background-color: white; } .evenRow { background-color:


.evenRow { background-color: silver; }
.formGrid { border: solid

#000 3px; width: 400px; }
.resultGrid { border: solid #000 1px; width: 200px;}
Применение этих стилей к имеет вид:
rowClasses= "oddRow, evenRow"
styleClass="formGrid">
...


Слайд 46 Чтобы применить стили к строкам таблицы необходимо установить

Чтобы применить стили к строкам таблицы необходимо установить значение атрибута rowClasses

значение атрибута rowClasses в oddRow, evenRow.
Стиль, определяющий внешнюю

рамку для таблицы, применяется с помощью атрибута styleClass(styleClass="formGrid")

Переопределение текстов сообщений
В JSF 1.2 были добавлены атрибуты requiredMessage и conversionMessage, таким образом теперь можно переопределять текст сообщений индивидуально для каждого компонента.

Слайд 47

Тогда в браузере получим:


label="First Number"
value="#{calculator.firstNumber}"
required="true"
requiredMessage="required"
converterMessage="not a valid number" />



label="Second Number"
value="#{calculator.secondNumber}"
required="true"
requiredMessage="required"
converterMessage="not a valid number" />


Тогда в браузере получим:

Слайд 49 Глобальное управление сообщениями
Сообщениями можно управлять глобально, для этого

Глобальное управление сообщениямиСообщениями можно управлять глобально, для этого следует определить набор

следует определить набор ресурсов в файле faces-config.xml и использовать

его для хранения текстов сообщений.

"http://java.sun.com/xml/ns/javaee/web-
facesconfig_1_2.xsd" version="1.2">

messages

...

Слайд 50 При этом необходимо определить файл message.properties:
javax.faces.component.UIInput.REQUIRED=required
javax.faces.converter.IntegerConverter

При этом необходимо определить файл message.properties:javax.faces.component.UIInput.REQUIRED=required javax.faces.converter.IntegerConverter

.INTEGER=not a valid number
При этом в теге нет необходимости писать requiredMessage, converterMessage.
Файл message.properties должен находиться в директории
c:\tomcat\webapps\calculator\WEB-INF\classes\

Слайд 51 Добавление контроллера
Добавим метод деления в класс calculator
public

Добавление контроллера Добавим метод деления в класс calculatorpublic class Calculator {

class Calculator {
private int firstNumber =

0;
private int result = 0;
...
public void divide() {
this.result = this.firstNumber/this.secondNumber;
}
public void clear () { result = 0; }
...
}

Слайд 52 Создадим класс-контроллер CalculatorController, содержащий ссылку на класс Calculator.
CalculatorController

Создадим класс-контроллер CalculatorController, содержащий ссылку на класс Calculator.CalculatorController также связан с

также связан с тремя компонентами JSF - другими словами,

он зависит от классов, являющихся частью JSF
resultsPanel – компонент типа UIPanel
firstNumberInput – компонент типа UIInput
secondNumberInput – компонент типа UInput
Таким образом, класс CalculatorController имеет вид:


Слайд 53 package aaa;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIInput;
import javax.faces.component.UIPanel;
import

package aaa; import javax.faces.application.FacesMessage;import javax.faces.component.UIInput; import javax.faces.component.UIPanel; import javax.faces.context.FacesContext; public class

javax.faces.context.FacesContext;

public class CalculatorController {
private Calculator

calculator;
private UIPanel resultsPanel;
private UIInput firstNumberInput;
private UIInput secondNumberInput;

Слайд 54 public String add() {
FacesContext facesContext =

public String add() { FacesContext facesContext = FacesContext.getCurrentInstance(); try {

FacesContext.getCurrentInstance();
try {
calculator.add();

resultsPanel.setRendered(true);
facesContext.addMessage(null,
new FacesMessage( FacesMessage.SEVERITY_INFO,
"Added successfully", null));
}catch (Exception ex) {
resultsPanel.setRendered(false);
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
ex.getMessage(), null));
}
return null;
}

Слайд 55 public String multiply() {
FacesContext facesContext =

public String multiply() { FacesContext facesContext = FacesContext.getCurrentInstance(); try {

FacesContext.getCurrentInstance();
try {
calculator.multiply();

resultsPanel.setRendered(true);
facesContext.addMessage(null,
new FacesMessage( FacesMessage.SEVERITY_INFO,
"Multiplied successfully", null));
}catch (Exception ex) {
resultsPanel.setRendered(false);
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
ex.getMessage(), null));
}
return null;
}

Слайд 56 public String divide() {
FacesContext

public String divide() {  FacesContext facesContext = FacesContext.getCurrentInstance();  try

facesContext = FacesContext.getCurrentInstance();
try {

calculator.divide();
resultsPanel.setRendered(true);
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,
"Divided successfully", null));
}catch (Exception ex) {
resultsPanel.setRendered(false);
if (ex instanceof ArithmeticException) {
// Т.к. поле secondNumberInput связано с полем secondNumber, то поле
// secondNumber будет равно 1.
secondNumberInput.setValue(Integer.valueOf(1));
}
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
ex.getMessage(), null));
}
return null;
}

Слайд 57 public String clear() {
FacesContext facesContext =

public String clear() { FacesContext facesContext = FacesContext.getCurrentInstance(); try {

FacesContext.getCurrentInstance();
try {
calculator.clear();

resultsPanel.setRendered(false);
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,
"Results cleared", null));
}catch (Exception ex) {
resultsPanel.setRendered(false);
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
ex.getMessage(), null));
}
return null;
}

Слайд 58 public String getFirstNumberStyleClass() {
if (firstNumberInput.isValid())

public String getFirstNumberStyleClass() {  if (firstNumberInput.isValid()) {   return

{
return "labelClass"; }


else {
return "errorClass";
}
}
resultsPanel представляет собой секцию для вывода результатов арифметических операций.
resultsPanel.setRendered(true) делает панель результата видимой для пользователя.

Слайд 59 JSF предоставляет средства для показа сообщений пользователям о

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

статусе той или иной операции.
Для добавления сообщений используется

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

Слайд 60 Например, в методе add() в FacesContext добавляются сообщения,

Например, в методе add() в FacesContext добавляются сообщения, которые должны быть

которые должны быть доступны до конца обработки запроса.
public

String add() {
FacesContext facesContext = FacesContext.getCurrentInstance();
try {
calculator.add();
facesContext.addMessage(null,
new FacesMessage( FacesMessage.SEVERITY_INFO,
"Added successfully", null));
...
}catch (Exception ex) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
ex.getMessage(), null)); //протоколирование
исключения.
….
}
return null;
}

Слайд 61 В данном примере сообщения представляют собой объекты класса

В данном примере сообщения представляют собой объекты класса FacesMessage, добавляемые в

FacesMessage, добавляемые в объект facesContext.
При этом уровень важности

сообщения зависит от возникновения исключений при выполнении операции суммирования.
Если оно прошло успешно, то уровень будет INFO, в противном случае – ERROR.
Сообщения выводятся на странице с помощью тега :
errorClass="errorClass"
layout="table"
globalOnly="true"/>


Слайд 62 errorClass – атрибут устанавливает CSS стиль, который будет

errorClass – атрибут устанавливает CSS стиль, который будет применяться для сообщений

применяться для сообщений уровня “error”.
infoClass - атрибут устанавливает CSS

стиль, который будет применяться для сообщений уровня “info”.
Для вывода только глобальных сообщений, т.е. не относящихся к конкретному компоненту, можно установить значение атрибута globalOnly в true.




Слайд 63 Страница calculator.jsp будет иметь следующий вид
(на этой

Страница calculator.jsp будет иметь следующий вид (на этой странице осуществляется привязка

странице осуществляется привязка
firstNumber к firstNumberInput, а также secondNumber

к secondNumberInput):
……..


Calculator 3


errorClass="errorClass"
layout="table"
globalOnly="true"/>

rowClasses="oddRow, evenRow"
styleClass="formGrid">


Слайд 64



value="#{calculatorController.calculator.firstNumber}"
required="true"
binding="#{calculatorController.firstNumberInput}" />




Слайд 65


styleClass=
"#{calculatorController.secondNumberStyleClass}"/>



label="Second Number"
value="#{calculatorController.calculator.secondNumber}"
required="true"
binding="#{calculatorController.secondNumberInput}"/>







Слайд 66

value="Add" />
action="#{calculatorController.multiply}"
value="Multiply" />
action="#{calculatorController.divide}"
value="Divide" />
action="#{calculatorController.clear}"
value="Clear"
immediate="true"/>



Слайд 67

Results

rendered="false">

Results


rowClasses="oddRow, evenRow"
styleClass="resultGrid">







Слайд 68 Описание контроллера в файле
faces-config.xml имеет

Описание контроллера в файле  faces-config.xml имеет вид:

вид:

messages




calculatorController


aaa.CalculatorController


Слайд 69 request

calculator

request    calculator   #{calculator}


#{calculator}



calculator

aaa.Calculator

none


Слайд 70 Поскольку в данном случае объект calculator будет доступен

Поскольку в данном случае объект calculator будет доступен только через внешний

только через внешний объект calculatorController, его необходимо поместить в

область видимости none.
Это означает, что объект не будет помещен ни в какую специальную область видимости после создания.


calculator


aaa.Calculator


none




Слайд 71 Объект calculatorController будет помещен в область видимости request.

Объект calculatorController будет помещен в область видимости request. При этом ссылка


При этом ссылка на calculator будет передана в calculatorController.


Это делается с помощью выражения #{calculator} в теге .
Таким образом, JSF создаст экземпляр класса Calculator и передаст его в метод setCalculator класса CalculatorController

Слайд 72

calculatorController

calculatorController


aaa.CalculatorController


request

calculator
#{calculator}



Слайд 73 Объект calculator используется классом CalculatorController, но при этом

Объект calculator используется классом CalculatorController, но при этом сам остается “чистым”,

сам остается “чистым”, т.е. никоим образом не привязанным к

JSF.
Классы модели всегда желательно держать независимыми от библиотек, подобных JSF, изолируя весь JSF-зависимый код внутри контроллера, в данном случае – классе CalculatorController.
Это значительно облегчает тестирование и повторное использование модели.

Слайд 74 В случае jsf 2 можно использовать аннотации
@ManagedBean(name="calculatorController")
@RequestScoped
public class

В случае jsf 2 можно использовать аннотации@ManagedBean(name=

CalculatorController{
@ManagedProperty(name="calculator",

value="#{calculator}")
private Calculator calculator;
………………………..

}


  • Имя файла: java-server-faces-lektsiya-20.pptx
  • Количество просмотров: 116
  • Количество скачиваний: 0