Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

<h:commandButton value="Работа №4" action="#{menus31.run('4')}"/> <h:commandButton value="Работа №5" action="#{menus31.run('5')}"/> <h:commandButton value="Работа №6" action="#{menus31.run('6')}"/> <h:commandButton value="Работа №7" action="#{menus31.run('7')}"/> <h:commandButton value="Работа №8" action="#{menus31.run('8')}"/> <h:commandButton value="Работа №9" action="#{menus31.run('9')}"/> <hr/>

</h:panelGrid> </h:form>

</body> </html>

Запуск проекта до авторизации пользователя — на рисунке 2.30.

Рисунок 2.30 — Запуск labs с боковой панелью до авторизации пользователя

Запуск labs после авторизации пользователя показан на рисунке 2.31.

2.4.8 Второй вариант меню лабораторных работ

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

Рассмотрим новый вариант боковой панели, показанный на листинге 2.27.

120

Рисунок 2.31 — Запуск labs после авторизации пользователя

Листинг 2.27 — Исходный текст файла menus32.xhtml проекта labs

<?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"> <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Боковая страница</title>

</head>

<body> <h:form>

<h:panelGrid rendered="#{menus32.show}" colums="1" style="background-color:lightgray;width:150px;padding:10px">

121

<f:facet name="header"> <h:outputText value="Список работ"/> </f:facet>

<hr/>

<h:selectOneListbox id="list" align="center" value="#{menus32.work}" valueChangeListener="#{menus32.valueChanged}" onchange="submit()">

<f:selectItems value="#{menus32.data}"/>

</h:selectOneListbox> <hr/>

<h:commandButton action="#{menus32.run}" value="Запустить" /> </h:panelGrid>

</h:form> </body> </html>

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

а) тег <h:selectOneListbox> требует реализации метода valueChanget(), обслуживающего выбор пунктов меню;

б) тег <f:selectItems> требует доступа к списку объектов, каждый из которых представляет парные строки.

Для реализации функциональности подложки Menus32 создадим дополнительный CDI/ POJO-класс DString, исходный текст которого представлен на листинге 2.28.

Листинг 2.28 — Исходный текст класса DString.java проекта labs

package asu.rsos;

import javax.inject.Named;

@Named

public class DString { /**

* Пара строк для тега <f:selectItems> */

private String name; private String desc;

public DString() {}

public DString(String name, String desc) { this.name = name;

this.desc = desc;

}

122

public String getName() { return name;

}

public void setName(String name) { this.name = name;

}

public String getDesc() { return desc;

}

public void setDesc(String desc) { this.desc = desc;

}

@Override

public String toString() { return this.name;

}

}

Теперь компонента-подложка Menus32, предназначенная для новой боковой панели может быть представлена листингом 2.29, а результат запуска проекта labs с новой боковой панелью показан на рисунке 2.32.

Листинг 2.29 — Исходный текст класса Menus32.java проекта labs

package asu.rsos;

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

import javax.annotation.PostConstruct;

import javax.enterprise.context.RequestScoped; import javax.faces.event.ValueChangeEvent; import javax.inject.Inject;

import javax.inject.Named;

@Named

@RequestScoped public

class Menus32 { /**

* Инъекция обекта класса RSOS */

@Inject

private RSOS rsos;

// Имя пользователя

private String user = null;

//Наименование работы private String work = null;

//Содержимое <h:selectOneListbox> private List<DString> data;

/** * Пустой конструктор */

public Menus32()

123

{

data = new ArrayList<>();

data.add(new DString("Работа №1", "1")); data.add(new DString("Работа №2", "2")); data.add(new DString("Работа №3", "3")); data.add(new DString("Работа №4", "4")); data.add(new DString("Работа №5", "5")); data.add(new DString("Работа №6", "6")); data.add(new DString("Работа №7", "7")); data.add(new DString("Работа №8", "8")); data.add(new DString("Работа №9", "9"));

}

// Для демонстрации @PostConstruct private void test() {

System.out.println("Объект класса Menus32 - стартовал...");

}

// Стандартная обработка атрибутов public String getUser()

{

user = rsos.getUser();

if(user == null) return "Не выбран"; return user;

}

public String getWork()

{

work = rsos.getWork();

if(work == null) return "Работа №1"; return work;

}

public void setWork(String work) {this.work = work;}

public List<DString> getData()

{

return data;

}

// Показывать или не показывать компоненту public boolean isShow()

{

user = rsos.getUser();

if(user == null) return false; return true;

}

/** * Метод запуска работ */

public String run()

{

String ss = rsos.getXHTML(); if(ss == null) ss = "default";

System.out.println("Menus32:run() = " + ss); return ss;

}

124

// Обработчик события

public void valueChanged(ValueChangeEvent e)

{

work = (String) e.getNewValue(); System.out.println("Menus32:valueChanged() = "

+ work); rsos.setWork(work);

}

}

Рисунок 2.32 — Запуск labs после авторизации пользователя

125