Tapestry 4 beta5
一、注意空格。tapestry這點(diǎn)作的不太好。如果在一些屬性中開始或結(jié)尾多寫了個(gè)空格,就會(huì)發(fā)生錯(cuò)誤,而且很難找出來。
二、中文亂碼問題
在*.application中加入下面語句:
三。Shell組件默認(rèn)Render出來的meta有限,有時(shí)需要擴(kuò)展,通過delegate屬性,下面是個(gè)例子:
public class HeadMetaRender implements IRender {
public void render(IMarkupWriter writer, IRequestCycle cycle) {
writer.begin("meta");
writer.attribute("http-equiv","Content-Language");
writer.attribute("content","zh-cn");
writer.closeTag();
writer.begin("meta");
writer.attribute("http-equiv","Content-Type");
writer.attribute("content","text/html; charset=gb2312");
writer.closeTag();
}
public void render(IMarkupWriter writer, IRequestCycle cycle) {
writer.begin("meta");
writer.attribute("http-equiv","Content-Language");
writer.attribute("content","zh-cn");
writer.closeTag();
writer.begin("meta");
writer.attribute("http-equiv","Content-Type");
writer.attribute("content","text/html; charset=gb2312");
writer.closeTag();
}
四、今天嘗試了Application State Object,Localization,FriendURL。
FriendUrl比較好弄,給的文檔也比較詳細(xì)。按照文檔copy就可以了。沒有仔細(xì)研究。
Locaition也很好弄,為每個(gè)頁面寫一個(gè)properties文件用于文件里面的文字,再為application寫一個(gè)用于做系統(tǒng)通用信息。只是注意編碼
includes="*.properties"
excludes="TNetCatcher.properties"/>
includes="*NetCatcher.properties"/>
在ant中加入如上target。
Application State Object 相關(guān)的東西弄了半天。我要做一個(gè)驗(yàn)證用戶合法性的功能,就是看VisitObject(Session Scope)中又沒有用戶信息,如果沒有用戶信息就跳轉(zhuǎn)到登錄頁面。這樣的功能以往我是寫一個(gè)LoginFilter里檢查Session。但是在Tapestry中不建議直接操作Session。雖然我也可以知道那個(gè)VisitObject在Session中的名字(一般為"state:App-Name:visit-Name"),但是還是不用Filter了。我就寫了一個(gè)MyBasePage繼承與BasePage然后添加了一個(gè)MyPageValidateListener 實(shí)現(xiàn) PageValidateListener 在MyPageValidateListener 的pageValidate方法中進(jìn)行驗(yàn)證。
public class MyPageValidateListener implements PageValidateListener {
public void pageValidate(PageEvent event) {
IRequestCycle cycle = event.getRequestCycle();
MyBasePage page = (MyBasePage) event.getPage();
AppVisit visit = page.getAppVisit();
if(visit.getCustomer()==null
&&!page.getPageName().equals("Login")
&&!page.getPageName().equals("Register")
&&!page.getPageName().equals("GetPassword")){
IPage login = cycle.getPage("Login");
throw new PageRedirectException(login);
}
}
}
public void pageValidate(PageEvent event) {
IRequestCycle cycle = event.getRequestCycle();
MyBasePage page = (MyBasePage) event.getPage();
AppVisit visit = page.getAppVisit();
if(visit.getCustomer()==null
&&!page.getPageName().equals("Login")
&&!page.getPageName().equals("Register")
&&!page.getPageName().equals("GetPassword")){
IPage login = cycle.getPage("Login");
throw new PageRedirectException(login);
}
}
}
這里,最好在最后Throw一個(gè)PageRedirectException,不要用cycle.activate()。
這樣有一點(diǎn)要注意的是,必須在沒有頁面的page文件中加入
五Tacos - Tapestry Components
http://tacos.sourceforge.net/
現(xiàn)在升級(jí)到4.0了,增加了很多新組件,以Ajax應(yīng)用為主。以后應(yīng)該關(guān)注。
2005年9月11日
這一周來,利用在家里的一點(diǎn)點(diǎn)空閑實(shí)現(xiàn),慢慢的熟悉Tapestry。從最開始的getting started,到熟悉各種component,現(xiàn)在已經(jīng)開始慢慢的嘗試自己做component了。今天做了一個(gè)很簡(jiǎn)單的Component,會(huì)顯示tooltip的Insert組件。最然很簡(jiǎn)單只是在render的過程中加入一些js語句而已,但是自己已經(jīng)很高興了。
現(xiàn)在越來越感覺到用Tapestry的樂趣了。Tapestry的確是一個(gè)很優(yōu)秀也很有趣的Web Framework。還有很多有意思的東西值得去研究。現(xiàn)在我遇到的難題是Script部分。據(jù)說Tapestry對(duì)javaScript支持作的很好,但是我現(xiàn)在的感覺是,滿頭霧水。再慢慢研究吧。
進(jìn)行前臺(tái)開發(fā)最主要的需求就是快,而Tapestry卻把簡(jiǎn)單的東西復(fù)雜化,不易于上手,等差不多弄明白了,項(xiàng)目也該結(jié)束,這跟快速開發(fā)的理念背道而馳。