Apache Tapestry - Встроенные компоненты
В этой главе рассказывается о встроенных компонентах, которые есть в Tapestry, с соответствующими примерами. 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>
Запрос страницы даст результат, как показано ниже.
Result - http: // localhost: 8080 / MyFirstApplication / ifsample
Если и компонент-делегат
В unless componentявляется полной противоположностью компонента if, который обсуждался выше. В то времяdelegate componentне выполняет рендеринг самостоятельно. Вместо этого он обычно делегирует разметку блочному элементу. Если и если компоненты не могут использовать делегат и блок для условной замены динамического содержимого.
Создать страницу 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>
Запрос страницы даст результат, как показано ниже.
Result - http: // localhost: 8080 / MyFirstApplication / если
Компонент цикла
Компонент цикла является основным компонентом для циклического перебора элементов коллекции и визуализации тела для каждого значения / итерации.
Создайте страницу цикла, как показано ниже -
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>
Компонент цикла имеет следующие два параметра -
source- Источник коллекции. 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 имеет параметр страницы, который должен ссылаться на целевую страницу гобелена.
Result - 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 имеет следующие два параметра -
Event- Название события, которое должно запускаться в компоненте EventLink. По умолчанию он указывает на идентификатор компонента.
Context- Необязательный параметр. Он определяет контекст для ссылки.
Result - 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.
Result - 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>
Предупреждение имеет три уровня серьезности, а именно:
- Info
- Warn
- Error
Приведенный выше шаблон создается с использованием информационного предупреждения. Он определяется какalert-info. В зависимости от необходимости вы можете создать другие уровни серьезности.
Запрос страницы даст следующий результат -
http://localhost:8080/myFirstApplication/Alerts