Лабораторная работа: Работа с данными JSF (часть 1) — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Лабораторная работа: Работа с данными JSF (часть 1)

2022-10-10 54
Лабораторная работа: Работа с данными JSF (часть 1) 0.00 из 5.00 0 оценок
Заказать работу

Идея моей лабораторной работы проста. Мы берем и пользуемся готовым веб-сервисом. Т.е. мы его используем и пишем для него клиент. Ну а т.к. веб-сервис в сети, то мы по сути работаем с реальным веб-сервисом.

В чем заключается идея лабораторной работы? Из чего она состоит? И что вы там увидите? Предполагается, что на экране есть список клиентов или сотрудников. Вы можете выбрать любого в списке и отредактировать его, вы можете нажать кнопочку «Добавить», после чего добавляется пустая формочка и вы добавляете нового сотрудника. Вы можете добавить сотрудника, можете отредактировать, можете удалить его. Соответственно, у вас есть несколько страничек между которыми происходит переключение. Несколько кнопочек уже реализовано, но какие-то кнопочки обработчики событий не сделаны. Поэтому в лабораторной работе вы что должны будете сделать? Чтобы первая стартовая страница отображала список сотрудников, т.е. надо будет сделать отображение данных. Потом какую-то одну формочку реализовать, сделать на нее обработку событий. И в целом когда вы потихонечку шаг за шагом, то что написано в лабе, когда вы дойдете до окончания, то в принципе программа будет работать. Там есть пара моментов, которые не отрабатывают. Если захотите, то можем это обсудить, как это надо исправлять. И есть один вопрос, который в лабе задается. Кнопочка «Cancel» - у нас, когда формочку пользователь для пользователя начинает заполнять, там есть кнопочка «Добавить» и Кнопочка «Cancel». Так вот кнопочка «Cancel» работать не будет. Вы начинаете заполнять, нажимаете «Cancel», вам говорят «не все поля заполнены». И надо будет подумать, а как вообще сделать, чтобы «Cancel»заработал и понять почему это не работает. Это вопрос важный.

Работа с данными в JSF. - Откройте проект WebApplication2 в каталоге Лабы Java2/JSF/Lab1. - Запустите его, обратите внимание, что на стартовой странице «clientList.xhtml» нет отображения данных, а так же отсутствуют обработчики на кнопки Add/Cancel и Save/Cancel. - Откройте форму clientList.xhtml и после открывающего тега <h:form> создайте таблицу для отображения списка Клиентов: · Добавьте открывающий и закрывающий теги для генерации таблицы – h:dataTable; · В открывающем теге добавьте атрибут value=””, а в качестве значения передайте метод clienList из объекта clientlist. Тут же добавьте атрибут var=”elem”, который и будет ссылкой на текущий элемент списка; · Ниже добавьте открывающий и закрывающий теги для создания столбца – h:column; · Внутри этого тега создайте заголовок столбца таблицы и напишите выражение для доступа к данным из текущего элемента списка:           <f:facet name="header">id</f:facet> #{elem.id} · Ниже создайте ещё четыре столбца для полей списка fname,lname,mail и discount соответственно. - Откройте класс Client.java и добавьте в него код для обработчиков на события: · Объявите метод «cancel», который ничего не возвращает и получает параметр ActionEvent. В теле метода завершите обработку запроса вызвав метод renderResponce(): FacesContext.getCurrentInstance().renderResponse(); · Объявите метод «addClient», который ничего не возвращает и получает параметр ActionEvent. В теле метода создайте объект класса «Client» использую конструктор с тремя параметрами. Установите параметр «discount» в соответствующее значение. Получите ссылку на объект класс «ClientList» используя следующий код: ClientList list=(ClientList) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("clientlist"); · В конце метода «addClient» проверьте, что ссылка на коллекцию была инициализирована и добавьте нового Клиента в коллекцию «list». · Объявите метод «getDiscounts», который возвращает массив «int» и не имеет входных параметров. В этом методе создайте массив состоящий из целых чисел, например 0,5,10,15 и верните его из метода. - Откройте форму newClient.xhtml и добавьте обработчики на Actionevent для кнопок «Add» и «Cancel».Найдите открывающий тег <h:selectOneMenu...> и после него добавьте тег <f:selectItems />. В этом теге создайте атрибут «value=””» и в качестве значения установите ему метод «discounts» из объекта «client». - Откройте форму editClient.xhtml и добавьте обработчики на Actionevent для кнопок «Save» и «Cancel».Найдите открывающий тег <h:selectOneMenu...> и после него добавьте тег <f:selectItems />. В этом теге создайте атрибут «value=””» и в качестве значения установите ему метод «discounts» из объекта «client». - Запустите приложение. Нажмите кнопку «New», а затем сразу отмену «Cancel». Почему отмена не работает? - Исправьте код. - Что ещё нуждается в улучшении? Ваши предложения.....

 

- Запустите приложение. Нажмите кнопку «New», а затем сразу отмену «Cancel». Почему отмена не работает?

- Исправьте код.

- Что ещё нуждается в улучшении? Ваши предложения.....

 

Разбираем лабораторную работу:

Почему не работал «Cancel»?

Вот ответ на этом слайде:

Давайте еще раз. Значит, что у нас происходит? Приходит запрос, получили View, получили для дерева объектов данные, их начали обрабатывать. Validationпошел. Но в Validationвыясняется, что полей-то нету. На этапе валидации у нас происходит событие, где срабатывают все проверки. Всё. Вы вылетели и страничку отправили клиенту и говорят: «введи поля». А «Cancel»где работает? Вот где он работает! Все события, которые мы разбирали на последних слайдах перед лабой, они происходят на этапе «вызов событий». И соответственно, получается, что до события «Cancel»Это дело даже не доходит. Вот для того, чтобы это решить вот такую проблемную ситуацию легко и красиво они придумали волшебное слово «пожалуйста, сделай обработку моих событий пораньше». – вот это слово должно быть:

 

Далее…

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

1. Если я запущу программу, то у меня выводится список. Я выбираю, например, третий. Сначало данных не было при первом запуске.

А теперь данные есть.

А почему так? Все эти накладочки мы обсуждали. Я даже показывал код, как эти проблемы решить. Но здесь важно понять одно, если вы захотите, то разберетесь с этой проблемой. Но все начинается из-за чего? Мы сейчас обращаемся к какому объекту? У нас ClientList. И там где-то и создается объект ClientList, правильно? Причем там стоит параметр «создай его как можно раньше, прежде чем эта формочка появится и начнет рендериться». Это удобно. НО! Но когда вы печатаете номер и нажимаете «Edit», то открывается другая страница и создается объект «Client». Понимаете? Он создается налету. И в общем получается так, что когда вы здесь «3» выбираете, то данные некуда класть. Я не помню, как там в программе сделано. То ли там новый объект создается. Как-то получается, что когда мы переключаемся со страницы clientListв первый раз, вот в первый раз в этот момент и создается объект Clientи мы начинаем с ним уже работать. А если вы Updateнажмете, то она создаст этот объект.

Идем дельше…

У нас после первой лабораторной еще есть соответственно пару картинок, где нам предлагают задуматься, что можно еще улучшить. Вот что можно еще улучшить.


Поделиться с друзьями:

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.