http://assets.optomus.com/java
tapestry的請求,能夠分爲如下兩種:
render請求,也就是顯示畫面的請求
event請求,就是和頁面交互的時候,觸發組件的事件的請求(form的提交請求)post
tapestry的事件處理:this
actionlink, eventlink是get請求 (GET-REDIRECT-GET)url
form是post請求 (POST-REDIRECT-GET)spa
若是一個事件處理完後,須要從新render頁面,多是當前頁面,也有多是遷移到另一個頁面。code
由於在遷移時須要進行當前page實例的返回過程(onPassivate),因此,若是停留在當前頁面,須要考慮調用onPassivate來保留當前頁面的狀態(說白了就是把狀態放到請求的url上),當從新獲取page實例時,調用onActivate來取得保存的狀態。orm
關於各類Link組件的context內容事件
1)pagelink的context參數,做爲目標page的onActivate()方法的參數。文檔
<t:pagelink page="about" context="param">About</t:pagelink>get About.java的onActivate方法 void onActivate(String param) {} 注:一但有ActivateParam傳入目標頁面,則目標頁面中的eventlink會自動添加這個參數到event產生的url中,標識爲?t:ac=param,這樣,最終的url將包含2種context內容,event的context及Activate的context。 url=http://localhost:8080/about/eventparam?t:ac=activateParam |
2)eventlink,actionlink的context參數,做爲event處理方法的參數。
<t:eventlink t:id="Hello" context="literal:hello">Hello</t:eventlink> void onHello(String message) {} |
其中render請求比較好理解,直接在url中輸入想要訪問的頁面就能夠了。
event的請求,稍微有些複雜,一個event請求,可能經歷Post-Redirect-Get的方式。首先是調用事件處理方法,
在根據事件處理方法的返回值,產生一個Redirect請求給客戶端,而後在發送get請求。
主要的組件事件:
EventLink | ActionLink | Form,其中ActionLink不推薦
事件處理方法的返回值:
null : 顯示當前的頁面
Object: page.class | page instance -->顯示page對應的頁面
String : 不推薦使用,雖然能夠
StreamResponse : 主要用來生成PDF等文件
返回方式能夠參考tapestry的官方文檔,其實很簡單,StreamResponse的功能之後些相關內容進行介紹。
如何在事件處理方法中動態的選擇跳轉的頁面,而且給該頁面傳遞參數。
@Inject private PageRenderLinkSource resource; public Object onEvent() { pageName = xxx ? "MyPage" : "YourPage"; return resource.createPageRenderLinkWithContext(pageName, param1, param2); } MyPage.java ------------------------- void onActivate(Object param1, Object param2) { this.param1 = param1; this.param2 = param2; } Object[] onPassivate() { returen {this.param1, this.param2}; }
ComponentResource的createEventLink的做用 1)動態的在頁面上建立EventLink組件。有什麼具體的意義? 在page.java中,定義幾種event的處理方法,在grid組件中,根據當前數據項目的莫個key值動態建立EventLink。