Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Wicket.docx
Скачиваний:
7
Добавлен:
23.03.2015
Размер:
68.23 Кб
Скачать

Наследование при разработке Web-страниц

Рассмотрим типовую задачу: необходимо создать приложение, все страницы которого оформлены единообразно, но имеют ряд отличий. Например, каждая страница должна иметь свой заголовок. В разных средствах разработки данная задача решается по-разному. Как правило, страницы компонуются из набора повторно-используемых шаблонов или компонент. Библиотека Wicket позволяет решить данную задачу с применением наследования. Создадим файл разметки для абстрактной базовой страницы приложения BasicPage.html

<html xmlns:wicket="http://wicket.sourceforge.net/">

<head>

<title><span wicket:id="pageTitle">Page title</span></title>

<link rel="stylesheet" type="text/css" href="style.css"/>

</head>

<body>

<wicket:child/>

</body>

</html>

Данный пример предельно упрощен, BasicPage всего лишь подключает ко всем страницам таблицу каскадных стилей и позволяет менять заголовок страницы динамически. Интерес представляет только специальный тег <wicket:child/>, при помощи которого указывается, каким образом дочерние страницы будут расширять разметку BasicPage. Создадим контроллер страницы:

public class BasicPage extends WebPage

{

public BasicPage()

{

Label title = new Label("pageTitle", new StringResourceModel("pageTitle", this, null));

title.setRenderBodyOnly(true);

add(title);

}

}

Значение компонента Label берется из ресурсного файла, для доступа к которому используется модель StringResourceModel. Ресурсный файл BasicPage.properties, должен содержать константу pageTitle.

pageTitle=Базовая страница

Теперь мы снова вернемся к странице AddPersonPage и переделаем ее таким образом, чтобы она расширяла базовую страницу BasicPage. Во-первых, класс-контроллер данной страницы должен расширять класс BasicPage.

public class AddPersonPage extends BasicPage

{

...

}

Во-вторых, необходимо изменить файл AddPersonPage.html:

<html xmlns:wicket="http://wicket.sourceforge.net/">

<body>

<wicket:extend>

<div wicket:id="border">

<form wicket:id="form">

<span wicket:id="feedback"/>

<div>Имя: <input wicket:id="name" type="text" /></div>

<div>Адрес: <input wicket:id="email" type="text" /></div>

<input type="submit" name="submit" value="Сохранить"/>

</form>

</div>

</wicket:extend>

</body>

</html>

В примере появился новый специальный тег <wicket:extend>. Он указывает, какая часть разметки будет использована для расширения разметки базовой страницы.

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

pageTitle=Ввод персональных данных

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

<html>

<head>

<title>Basic page</title>

<link rel="stylesheet" type="text/css" href="style.css"/>

</head>

<body>

<span>

Пример приложения Wicket

<hr/>

</span>

<div align="center" style="border:1px solid #000000">

<span style="font-weight: bold">Введите данные</span>

<form action="/wdemo/app?path=0:border:form&interface=IFormSubmitListener" method="post">

<span></span>

<div>Имя: <input value="" type="text" name="name"/></div>

<div>Адрес: <input value="" type="text" name="email"/></div>

<input type="submit" name="submit" value="Сохранить"/>

</form>

</div>

</body>

</html>

Подведем итог: страница AddPersonPage унаследовала от BasicPage не только Java-код, но и разметку страницы. Если бы в файле AddPersonPage.properties не существовало константы pageTitle, то использовалось бы значение из ресурсного файла базового класса.