📅  最后修改于: 2020-10-27 03:06:06             🧑  作者: Mango
本章通过适当的示例说明Tapestry拥有的内置组件。 Tapestry支持65个以上的内置组件。您还可以创建自定义组件。让我们详细介绍一些值得注意的组件。
if组件用于有条件地渲染块。通过测试参数检查条件。
创建一个页面IfSample.java ,如下所示-
package com.example.MyFirstApplication.pages;
public class Ifsample {
public String getUser() {
return "user1";
}
}
现在,创建一个对应的模板文件,如下所示:
If-else component example
Hello ${user}
You are not a Tapestry user
请求页面将呈现结果,如下所示。
结果-http:// localhost:8080 / MyFirstApplication / ifsample
除非组件与上面讨论的if组件恰好相反。同时,委托组件不会自行进行任何渲染。相反,它通常将标记委托给block元素。除非且是否组件可以使用委托和阻止有条件地交换动态内容。
如下创建一个页面,除非.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;
}
}
}
现在,创建一个对应的模板文件,如下所示:
Delegate component
If-Unless component
bool == Boolean.TRUE.
bool = Boolean.FALSE.
bool == Boolean.FALSE.
请求页面将呈现结果,如下所示。
结果-http:// localhost:8080 / MyFirstApplication /除非
循环组件是循环收集项并为每次值/每次迭代渲染主体的基本组件。
创建一个Loop页面,如下所示-
package com.example.MyFirstApplication.pages;
import org.apache.tapestry5.annotations.Property;
public class Loop {
@Property
private int i;
}
然后,创建相应的模板Loop.tml
This is sample parameter rendering example...
- ${var:i}
循环组件具有以下两个参数-
源-收集源。 1…5是用于创建具有指定范围的数组的属性扩展。
var-渲染变量。用于在模板主体中呈现当前值。
请求页面将呈现结果,如下所示-
PageLink组件用于将页面从一页链接到另一页。创建如下的PageLink测试页-PageLink.java 。
package com.example.MyFirstApplication.pages;
public class PageLink {
}
然后,创建相应的模板文件,如下所示-
Page Link
Click here to navigate Index page
PageLink组件具有一个page参数,该参数应引用目标挂毯页面。
结果-http:// localhost:8080 / myFirstApplication / pagelink
EventLink组件通过URL发送事件名称和相应的参数。创建一个EventsLink页面类,如下所示。
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”模板文件-
Event link example
AddedCount = ${x}.
Click here to add count
EventLink具有以下两个参数-
事件-EventLink组件中要触发的事件的名称。默认情况下,它指向组件的ID。
上下文-这是一个可选参数。它定义了链接的上下文。
结果-http:// localhost:8080 / myFirstApplication / EventsLink
单击计数值后,页面将在URL中显示事件名称,如以下输出屏幕截图所示。
ActionLink组件类似于EventLink组件,但它仅发送目标组件ID。默认事件名称是action。
创建一个页面“ 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;
}
}
现在,创建一个相应的模板文件,如下所示-
Count = ${count}.
Decrement
在这里,单击ActionLink组件时将调用OnActionFromSub方法。
结果-http:// localhost:8080 / myFirstApplication / ActivationsLink
警报对话框通常用于向用户发出警告消息。例如,如果输入字段需要一些必填文本,但用户未提供任何输入,则作为验证的一部分,您可以使用警报框发出警告消息。
创建一个页面“ Alerts”,如以下程序所示。
package com.example.MyFirstApplication.pages;
public class Alerts {
public String getUser() {
return "user1";
}
}
然后,如下创建相应的模板文件-
Alerts
Welcome ${user}
警报具有三个严重性级别,分别是-
上面的模板是使用信息警报创建的。它定义为alert-info 。您可以根据需要创建其他严重级别。
请求页面将产生以下结果-
http:// localhost:8080 / myFirstApplication / Alerts