Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / КСТ / Разработка веб-приложений.pdf
Скачиваний:
246
Добавлен:
23.02.2015
Размер:
2.74 Mб
Скачать

<h:inputHidden

value="#{citiesView.selected.idCity}"/>

</td>

</tr>

<tr>

<td><h:outputLabel value="Название: #{citiesView.selected.name}"/>

<h:inputHidden

value="#{citiesView.selected.name}!/>

</td>

</tr>

<tr>

<td><h:outputLabel value=!Население: #{citiesView.selected.population}"/>

<h:inputHidden

value="#{citiesView.selected.population}"/>

</td>

</tr>

<tr>

<td>

<h:commandButton action="#{citiesView.del_yes_City}"

value="Удалить" /> <h:commandButton action="citiesPage" value="Отменить" />

</td>

</tr>

</table>

</h:form>

</td>

</tr>

</table>

</f:view>

</body>

</html>

Упражнение

Объясните назначение свойства selected, где и как оно используются.

20.6. Создание и просмотр отчетов

Пусть нам требуется найти всех персон, имеющих возраст в задаваемом клиен-

том диапазоне лет относительно текущей даты просмотра. Для этого потребуется соз-

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

258

Добавим в файл просмотра персон после ссылки для перехода на главную страницу фрагмент с командой:

<br/>

<h:form>

<h:commandLink action="queryAge"> <h:outputText value="Запрос по возрасту" />

</h:commandLink>

</h:form>

Добавим в класс вида для персон три свойства: ageMin — минимальный и ageMax — максимальный возраст; resAge — результирующий список поиска персон.

private int ageMin = 0; private int ageMax = 0; List<Persons> resAge;

.. . . .

//ageMin

public int getAgeMin() { return this.ageMin;

}

public void setAgeMin(int d) { this.ageMin = d;

}

//ageMax

public int getAgeMax() { return this.ageMax;

}

public void setAgeMax(int d) { this.ageMax = d;

}

Добавим в вид метод – обработчик диапазона возрастов, введённых клиен-

том на запрос формы ввода. Здесь формируется params: параметр – массив до-

пустимых возрастов персон для отбора методом фасада персон personsFacade. findRangeAge(params). Результат поиска будет храниться в resAge. Следующей страницей для клиента будет resQAge.xhtml, показывающая результаты запроса.

public String queryAge_yes() {

int[] params = new int[] {ageMin, ageMax}; //System.out.println(params);

resAge = personsFacade.findRangeAge(params); return "resQAge";

}

Метод на чтение для запроса свойства вида со страницы вывода результатов

поиска:

public List<Persons> getResAge() { return resAge;

}

259

В фасад персон добавим метод поиска персон в заданном интервале воз-

растов. Интервал дат рождения формируется с использованием классов Calendar и

GregorianCalendar пакета java.util.

public List<Persons> findRangeAge(int[] age) { Calendar age0 = new GregorianCalendar(); Calendar age1 = new GregorianCalendar();

age1.add(Calendar.YEAR, -age[0]);

// максимальная дата

age0.add(Calendar.YEAR, -age[1]);

// минимальная дата

Date birth0 = age0.getTime();

 

Date birth1 = age1.getTime();

 

//System.out.println(birth0);

 

//System.out.println(birth1);

 

return em.createQuery(

 

"SELECT p FROM Persons p WHERE p.bDay BETWEEN :bd0 AND :bd1")

.setParameter("bd0", birth0)

.setParameter("bd1", birth1)

.getResultList();

}

Добавим страницу queryAge.xhtml с формой для запроса диапазона возрас-

тов. Форма содержит два поля ввода: idMin и idMax и пару кнопок «Принять» и «Отменить».

Файл queryAge.xhtml

<?xml version="1.0" encoding="UTF-8"?>

<!--

To change this template, choose Tools | Templates and open the template in the editor.

-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:ui="http://java.sun.com/jsf/facelets"

>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>TODO supply a title</title> </head>

<body>

<f:view>

<h:form>

<h1><h:outputText value="Задайте возраст"/></h1> <h:panelGrid columns="2">

<h:outputLabel value="От:" for="idMin" /> <h:inputText id="idMin" value="#{personsView.ageMin}"

title="idMin"/>

<h:outputLabel value="До:" for="idMax" />

260

<h:inputText id="idMax" value="#{personsView.ageMax}" title="idMax"/>

</h:panelGrid>

<h:commandButton action="#{personsView.queryAge_yes}" value="Принять" />

<h:commandButton action="personsPage" value="Отменить" />

</h:form>

</f:view>

</body>

</html>

Добавим страницу resQAge.xhtml для показа результатов выполнения запроса.

Состав страницы совпадает со страницей просмотра всех персон и отличается источ-

ником данных personsView.resAge и командными ссылками на возможные продолже-

ния действий клиента.

Файл resQAge.xhtml

<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:ui="http://java.sun.com/jsf/facelets"

>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>Просмотр результатов запроса</title> </head>

<body>

<f:view>

<table border="1" width="100%"> <tr>

<td><h:outputLabel value="Персоны. Всего записей "/> <h:outputText value="#{personsView.resAge.size()}"/> </td>

</tr>

<tr>

<td>

<h:form>

<h:dataTable value="#{personsView.resAge}" var="person" border="1">

<h:column>

<f:facet name="header"> <h:outputText value="Ключ"/>

</f:facet>

<h:outputText value="#{person.idPerson}"/> </h:column>

<h:column>

<f:facet name="header"> <h:outputText value="Фамилия"/>

</f:facet>

261

<h:outputText value="#{person.family}"/> </h:column>

<h:column> <f:facet name="header">

<h:outputText value="Имя"/> </f:facet>

<h:outputText value="#{person.name}"/> </h:column>

<h:column>

<f:facet name="header"> <h:outputText value="Отчество"/>

</f:facet>

<h:outputText value="#{person.father}"/> </h:column>

<h:column>

<f:facet name="header">

<h:outputText value="Дата рождения"/> </f:facet>

<h:outputText value="#{person.bday}"> <f:convertDateTime dateStyle="short" />

</h:outputText>

</h:column>

<h:column>

<f:facet name="header"> <h:outputText value="Город"/>

</f:facet>

<h:outputText value="#{person.cityId.name}"/> </h:column>

<h:column>

<f:facet name="header"> <h:outputText value="Операции"/>

</f:facet>

<h:commandLink

action="#{personsView.modPerson(person)}"> <h:outputText value="Заменить" />

</h:commandLink>

<h:commandLink

action="#{personsView.delPerson(person)}"> <h:outputText value="Удалить" />

</h:commandLink>

</h:column>

</h:dataTable>

</h:form>

</td>

</tr>

<tr>

<td>

<h:form>

<h:commandLink action="personsPage">

262

Соседние файлы в папке КСТ