Tapestry 4 beta5

一、注意空格。tapestry這點作的不太好。如果在一些屬性中開始或結尾多寫了個空格,就會發生錯誤,而且很難找出來。
二、中文亂碼問題     

在*.application中加入下面語句:

   
   
三。Shell組件默認Render出來的meta有限,有時需要擴展,通過delegate屬性,下面是個例子:

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();
    }

四、今天嘗試了Application State Object,Localization,FriendURL。
FriendUrl比較好弄,給的文檔也比較詳細。按照文檔copy就可以了。沒有仔細研究。
Locaition也很好弄,為每個頁面寫一個properties文件用于文件里面的文字,再為application寫一個用于做系統通用信息。只是注意編碼
   
                          dest="${webinfo.dir}/page"
                  includes="*.properties"
                  excludes="TNetCatcher.properties"/>
                           dest="${webinfo.dir}"
                  includes="*NetCatcher.properties"/>
   

在ant中加入如上target。
Application State Object 相關的東西弄了半天。我要做一個驗證用戶合法性的功能,就是看VisitObject(Session Scope)中又沒有用戶信息,如果沒有用戶信息就跳轉到登錄頁面。這樣的功能以往我是寫一個LoginFilter里檢查Session。但是在Tapestry中不建議直接操作Session。雖然我也可以知道那個VisitObject在Session中的名字(一般為"state:App-Name:visit-Name"),但是還是不用Filter了。我就寫了一個MyBasePage繼承與BasePage然后添加了一個MyPageValidateListener 實現 PageValidateListener 在MyPageValidateListener 的pageValidate方法中進行驗證。
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);
        }
    }
}

這里,最好在最后Throw一個PageRedirectException,不要用cycle.activate()。
這樣有一點要注意的是,必須在沒有頁面的page文件中加入
 把Visit對象注射進去。我不知道Tapestry4為什么建議這樣用,而不是用原有的getVisit方法。這樣做的確使得程序靈活的很多可以自定義很多ASO。而不是僅僅局限于Global和Visit。但是我感覺也比較麻煩。當然原來的Visit和Global還是可以用的。

Tacos - Tapestry Components
http://tacos.sourceforge.net/
現在升級到4.0了,增加了很多新組件,以Ajax應用為主。以后應該關注。


2005年9月11日
這一周來,利用在家里的一點點空閑實現,慢慢的熟悉Tapestry。從最開始的getting started,到熟悉各種component,現在已經開始慢慢的嘗試自己做component了。今天做了一個很簡單的Component,會顯示tooltip的Insert組件。最然很簡單只是在render的過程中加入一些js語句而已,但是自己已經很高興了。
現在越來越感覺到用Tapestry的樂趣了。Tapestry的確是一個很優秀也很有趣的Web Framework。還有很多有意思的東西值得去研究。現在我遇到的難題是Script部分。據說Tapestry對javaScript支持作的很好,但是我現在的感覺是,滿頭霧水。再慢慢研究吧。