java Tapestry4.1.2入門說明教程第2/2頁
更新時間:2008年11月06日 19:51:14 作者:
不必關心鏈接!不必關心請求(http request)到了哪里!不必關心響應(http response)要轉向哪里!Tapestry構建于底層的request-resonse模式,基于Servlet技術,抽象出面向組件開發(fā)的模型。Tapestry關心的是:頁面、組件、事件、對象、方法、屬性!
對應的Home類:
復制代碼 代碼如下:
package com.bjsxt.crm.web.tapestry.test;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.html.BasePage;
public abstract class Home extends BasePage {
@Persist
public abstract int getCounter();
public abstract void setCounter(int count);
public void doClick(int increment){
int counter = getCounter();
counter = counter + increment;
setCounter(counter);
}
public void clearCounter(){
setCounter(0);
}
}
實例6:帶兩個參數(shù)的計算器
Home.html
復制代碼 代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
第一個Tapestry程序
現(xiàn)在時間是:<span jwcid="@Insert" value="ognl:new java.util.Date()"></span>
<p>
<a href="#" jwcid="@PageLink" page="Home">刷新</a>
<p>
計數(shù)器當前的值是:<span jwcid="@Insert" value="ognl:counter"></span>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:1">計數(shù)器增1</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:5">計數(shù)器增5</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:10">計數(shù)器增10</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:clearCounter">清空計數(shù)器</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:plus" parameters="ognl:{3,5}">計算3+5,</a>
計算結果是:<span jwcid="@Insert" value="ognl:result"></span>
</body>
</html>
使用ognl:{param1,param2}這樣的方式來傳遞多個參數(shù)。
對應的Home類:
復制代碼 代碼如下:
package com.bjsxt.crm.web.tapestry.test;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.html.BasePage;
public abstract class Home extends BasePage {
@Persist
public abstract int getCounter();
public abstract void setCounter(int count);
public abstract int getResult();
public abstract void setResult(int result);
public void doClick(int increment){
int counter = getCounter();
counter = counter + increment;
setCounter(counter);
}
public void clearCounter(){
setCounter(0);
}
public void plus(int a,int b){
setResult(a + b);
}
}
實例7:Tapestry表單及提交
假設現(xiàn)在要提交一個Person對象:
復制代碼 代碼如下:
package com.bjsxt.crm.web.tapestry.test;
import java.util.Date;
public class Person {
//姓名
private String name;
//年齡
private int age;
//出生日期
private Date birthday;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我們在Home頁面添加一個鏈接指向添加頁面(AddPerson)
Home.html:
復制代碼 代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
第一個Tapestry程序
現(xiàn)在時間是:<span jwcid="@Insert" value="ognl:new java.util.Date()"></span>
<p>
<a href="#" jwcid="@PageLink" page="Home">刷新</a>
<p>
計數(shù)器當前的值是:<span jwcid="@Insert" value="ognl:counter"></span>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:1">計數(shù)器增1</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:5">計數(shù)器增5</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:10">計數(shù)器增10</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:clearCounter">清空計數(shù)器</a> <br>
<a href="#" jwcid="@DirectLink" listener="listener:plus" parameters="ognl:{3,5}">計算3+5,</a>
計算結果是:<span jwcid="@Insert" value="ognl:result"></span>
<p>
<a href="#" jwcid="@PageLink" page="AddPerson">添加人員信息</a>
</body>
</html>
AddPerson.html
復制代碼 代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html jwcid="@Shell" title="添加人員信息">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body jwcid="@Body">
<form jwcid="@Form" success="listener:save">
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td width="17%">姓名</td>
<td width="20%"><input type="text" name="textfield" jwcid="@TextField" value="ognl:person.name"/></td>
<td width="10%">年齡</td>
<td width="19%"><input type="text" name="textfield2" jwcid="@TextField" value="ognl:person.age"/></td>
<td width="10%">出生日期</td>
<td width="24%"><input type="text" name="textfield22" jwcid="@DatePicker" translator="translator:date,pattern=yyyy-MM-dd" value="ognl:person.birthday"/></td>
</tr>
<tr>
<td colspan="6"><div align="center">
<input type="submit" name="Submit" value="提交"/>
</div></td>
</tr>
</table>
</form>
</body>
</html>
注意:在頁面中的Tapestry組件(使用了jwcid標記)的標簽,必須有相應的close tag,特別注意<input/>標簽,必須有close tag。
AddPerson.java
復制代碼 代碼如下:
package com.bjsxt.crm.web.tapestry.test;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.html.BasePage;
public abstract class AddPerson extends BasePage implements PageBeginRenderListener{
public abstract Person getPerson();
public abstract void setPerson(Person person);
public void pageBeginRender(PageEvent event) {
setPerson(new Person());
}
public void save(){
Person person = getPerson();
System.out.println("name="+getPerson().getName());
System.out.println("age="+getPerson().getAge());
System.out.println("birthday="+getPerson().getBirthday());
}
}
注意,需定義一個PageBeginRenderListener,來給Person賦予初始化值,否則,OGNL在解釋它(Person對象)的屬性時,會發(fā)生異常!
如何提交中文
我們必須在app.application中添加如下配置:
復制代碼 代碼如下:
<?xml version="1.0"?>
<!DOCTYPE application PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
<application>
<meta key="org.apache.tapestry.template-encoding" value="GBK"/>
<meta key="org.apache.tapestry.output-encoding" value="GBK"/>
<meta key="org.apache.tapestry.page-class-packages" value="com.bjsxt.crm.web.tapestry.test"/>
</application>
如何轉向其它頁面
利用@InjectPage注解直接注入頁面。如:
復制代碼 代碼如下:
@InjectPage("ShowProject")public abstract ShowProject getShowProject(); public IPage doSubmit() { ShowProject showProject = getShowProject(); showProject.setProject(getProject()); return showProject; }
Tapestry概要
在Tapestry中不用寫Action,而是listener method。你不用去構建URL地址,而是使用DirectLink組件,并配置它調用listener method。
Tapestry以組件為中心。所謂以組件為中心,即:
l Tapestry應用程序由一系列頁面(page)組成
l 頁面由更小的組件(Component)組成
l 組件本身也有可能由其它的組件組合而成的(不限制組合的深度)
l 每個頁面會有唯一的,不重復的名字
l 在每個頁面里面的組件,其標識也是不能重復的(默認的情況下,Tapestry會給頁面中的每個組件自動生成一個ID標識)
Tapestry與Spring的集成
集成需要用到第三方的類庫,可以下載: http://howardlewisship.com/downloads/tapestry-javaforge/tapestry-spring-1.0.0-bin.zip
將其解壓之后,將其中的jar包拷貝到類路徑中。
在我們的頁面類中,就可以用@InjectObject(“spring:userManager”)等類似的方法來訪問userManager對象了。
如:
@InjectObject("spring:userManager")
public abstract UserManager getUserManager();
Tapestry組件開發(fā)
相關文章
Spring+SpringMVC+MyBatis整合實戰(zhàn)(SSM框架)
框架整合難不難?難!東西多,配置文件復雜不好記憶,本文就來介紹一下Spring+SpringMVC+MyBatis整合實戰(zhàn),具有一定的參考價值,感興趣的可以了解一下2021-08-08springboot+VUE前后端分離實現(xiàn)疫情防疫平臺JAVA
本文主要使用了Java、springmvc、VUE、node.js、mybatis、mysql、tomcat、jquery、layui、bootstarp、JavaScript、html、css、jsp、log4j等一些常見的基本技術,實現(xiàn)一個疫情防疫小平臺2021-08-08springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結構
這篇文章主要介紹了springboot?vue接口測試HutoolUtil?TreeUtil處理樹形結構,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Spring Cloud體系實現(xiàn)標簽路由的方法示例
這篇文章主要介紹了Spring Cloud體系實現(xiàn)標簽路由的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05