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。