В этой главе рассказывается о встроенных компонентах Tapestry на подходящих примерах. Гобелен поддерживает более 65 встроенных компонентов. Вы также можете создавать собственные компоненты. Давайте рассмотрим некоторые известные компоненты в деталях.
Если компонент
Компонент if используется для условной визуализации блока. Условие проверяется тестовым параметром.
Создайте страницу IfSample.java, как показано ниже —
package com.example.MyFirstApplication.pages; public class Ifsample { public String getUser() { return "user1"; } }
Теперь создайте соответствующий файл шаблона следующим образом:
<html t:type = "newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <h3>If-else component example </h3> <t:if test = "user"> Hello ${user} <p:else> <h4> You are not a Tapestry user </h4> </p:else> </t:if> </html>
Запрос страницы отобразит результат, как показано ниже.
Результат — http: // localhost: 8080 / MyFirstApplication / ifsample
Если и делегировать компонент
Компонент Тогда — просто противоположность компонента if, который обсуждался выше. Хотя компонент делегата не выполняет никакого рендеринга сам по себе. Вместо этого он обычно делегирует разметку для блокирования элемента. Если и если компоненты не могут использовать делегировать и блокировать для условного обмена динамического содержимого.
Создайте страницу Unless.java следующим образом.
package com.example.MyFirstApplication.pages; import org.apache.tapestry5.Block; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.PersistenceConstants; import org.apache.tapestry5.annotations.Persist; public class Unless { @Property @Persist(PersistenceConstants.FLASH) private String value; @Property private Boolean bool; @Inject Block t, f, n; public Block getCase() { if (bool == Boolean.TRUE ) { return t; } else { return f; } } }
Теперь создайте соответствующий файл шаблона следующим образом:
<html t:type = "newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <h4> Delegate component </h4> <div class = "div1"> <t:delegate to = "case"/> </div> <h4> If-Unless component </h4> <div class = "div1"> <t:if test = "bool"> <t:delegate to = "block:t"/> </t:if> <t:unless test = "bool"> <t:delegate to = "block:notT"/> </t:unless> </div> <t:block id = "t"> bool == Boolean.TRUE. </t:block> <t:block id = "notT"> bool = Boolean.FALSE. </t:block> <t:block id = "f"> bool == Boolean.FALSE. </t:block> </html>
Запрос страницы отобразит результат, как показано ниже.
Результат — http: // localhost: 8080 / MyFirstApplication /, если
Петля компонент
Компонент цикла является основным компонентом для циклического перемещения по элементам коллекции и визуализации тела для каждого значения / итерации.
Создайте страницу Loop, как показано ниже —
Loop.java
package com.example.MyFirstApplication.pages; import org.apache.tapestry5.annotations.Property; public class Loop { @Property private int i; }
Затем создайте соответствующий шаблон Loop.tml
Loop.tml
<html t:type = "newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <p>This is sample parameter rendering example...</p> <ol> <li t:type = "loop" source = "1..5" value = "var:i">${var:i}</li> </ol> </html>
Компонент Loop имеет следующие два параметра —
-
источник — источник коллекции. 1… 5 — расширение свойства, используемое для создания массива с указанным диапазоном.
-
var — переменная рендеринга. Используется для отображения текущего значения в теле шаблона.
источник — источник коллекции. 1… 5 — расширение свойства, используемое для создания массива с указанным диапазоном.
var — переменная рендеринга. Используется для отображения текущего значения в теле шаблона.
Запрос страницы выдаст результат, как показано ниже —
Компонент PageLink
Компонент PageLink используется для связи страницы с одной страницы на другую. Создайте тестовую страницу PageLink, как показано ниже — PageLink.java .
package com.example.MyFirstApplication.pages; public class PageLink { }
Затем создайте соответствующий файл шаблона, как показано ниже —
PageLink.tml
<html t:type = "newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <body> <h3><u>Page Link</u> </h3> <div class = "page"> <t:pagelink page = "Index">Click here to navigate Index page</t:pagelink> <br/> </div> </body> </html>
Компонент PageLink имеет параметр страницы, который должен ссылаться на целевую страницу гобелена.
Результат — http: // localhost: 8080 / myFirstApplication / pagelink
Компонент EventLink
Компонент EventLink отправляет имя события и соответствующий параметр через URL. Создайте класс страницы EventsLink, как показано ниже.
EventsLink.java
package com.example.MyFirstApplication.pages; import org.apache.tapestry5.annotations.Property; public class EventsLink { @Property private int x; void onActivate(int count) { this.x = x; } int onPassivate() { return x; } void onAdd(int value) { x += value; } }
Затем создайте соответствующий файл шаблона «EventsLink» следующим образом:
EventsLink.tml
<html t:type = "newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <h3> Event link example </h3> AddedCount = ${x}. <br/> <t:eventlink t:event = "add" t:context = "literal:1"> Click here to add count </t:eventlink><br/> </html>
EventLink имеет следующие два параметра —
-
Событие — имя события, которое должно быть запущено в компоненте EventLink. По умолчанию он указывает на идентификатор компонента.
-
Контекст — это необязательный параметр. Он определяет контекст для ссылки.
Событие — имя события, которое должно быть запущено в компоненте EventLink. По умолчанию он указывает на идентификатор компонента.
Контекст — это необязательный параметр. Он определяет контекст для ссылки.
Результат — http: // localhost: 8080 / myFirstApplication / EventsLink
После нажатия значения счетчика на странице отобразится имя события в URL-адресе, как показано на следующем выходном снимке экрана.
Компонент ActionLink
Компонент ActionLink аналогичен компоненту EventLink, но он отправляет только идентификатор целевого компонента. Имя события по умолчанию — действие.
Создайте страницу «ActivationLinks.java», как показано ниже,
ActivationLinks.java
package com.example.MyFirstApplication.pages; import org.apache.tapestry5.annotations.Property; public class ActivationLinks { @Property private int x; void onActivate(int count) { this.x = x; } int onPassivate() { return x; } void onActionFromsub(int value) { x -= value; } }
Теперь создайте соответствующий файл шаблона, как показано ниже —
ActivationLinks.tml
<html t:type = "Newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <div class = "div1"> Count = ${count}. <br/> <t:actionlink t:id = "sub" t:context = "literal:1"> Decrement </t:actionlink><br/> </div> </html>
Здесь метод OnActionFromSub будет вызываться при щелчке компонента ActionLink.
Результат — http: // localhost: 8080 / myFirstApplication / ActivationsLink
Компонент оповещения
Диалоговое окно предупреждения в основном используется для выдачи предупреждающего сообщения пользователям. Например, если для поля ввода требуется обязательный текст, но пользователь не вводит никаких данных, в качестве части проверки вы можете использовать окно предупреждения для выдачи предупреждающего сообщения.
Создайте страницу «Оповещения», как показано в следующей программе.
Alerts.java
package com.example.MyFirstApplication.pages; public class Alerts { public String getUser() { return "user1"; } }
Затем создайте соответствующий файл шаблона следующим образом:
Alerts.tml
<html t:type = "Newlayout" title = "About MyFirstApplication" xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p = "tapestry:parameter"> <h3>Alerts</h3> <div class = "alert alert-info"> <h5> Welcome ${user} </h5> </div> </html>
Оповещение имеет три уровня серьезности, которые:
- Информация
- предостерегать
- ошибка
Приведенный выше шаблон создан с использованием информационного оповещения. Это определяется как alert-info . Вы можете создавать другие уровни серьезности в зависимости от необходимости.
Запрос страницы даст следующий результат —
HTTP: // локальный: 8080 / myFirstApplication / Alerts