T5有三种类型的事件,分别是EventLink,ActionLink,Form。并且前两种是通过HTTP GET从服务器获得信息的,最后一种是通过HTTP POST获得信息的。
还有一点儿很重要的就是EventLink和ActionLink从服务器端获得想要的信息的方式是:GET/REDIRECT/GET。FORM的方式是:POST/REDIRECT/GET。
至于两种方式的优势,大家可以在网上找到,按照我自己的理解就是,获得到的URL可以保存,并且可以任意刷新,还可以随意的返回(Return)到前一个页面。
以上都是写常识。今天无聊做了个实验发现了几个小东西,一一列出来。
1 假如我们有一个URL地址,假如是:http://localhost:8686/t5study/about/13,这个时候,我们在地址栏处点击回车和对这个地址进行刷新是会有不同的结果的。
回车的log
[INFO] pages.About -----------onActivate(int param)-----------[INFO] pages.About -----------@SetupRender-----------[INFO] pages.About -----------onPassivate()-----------[INFO] AppModule.TimingFilter Request time: 3 ms
刷新的log
[INFO] pages.About -----------onActivate(int param)-----------[INFO] pages.About -----------@SetupRender-----------[INFO] pages.About -----------onPassivate()-----------[INFO] AppModule.TimingFilter Request time: 6 ms[INFO] AppModule.TimingFilter Request time: 0 ms[INFO] AppModule.TimingFilter Request time: 0 ms
虽然,所干的事儿是一样的,但是刷新的话,会造成三次访问。以上这些有无意义,我也不知道。
但是下面的事儿是个正事儿:
我们在点击一个EventLink的时候,在link上面hover的时候,下面的那一排字母,类似于:
http://localhost:8080/input/eventlinks:add/1?t:ac=11
这个才是我们get请求的URL,它会向服务器发送一个HTTP GET请求,并且我们的onActivate方法接受到的参数就是ac=后面的内容。而传递过来的参数是这个1。下面是一个请求的log:
[INFO] pages.About -----------onActivate(int param)-----------[INFO] pages.About -----------onAdd(int a)-----------[INFO] pages.About -----------onPassivate()-----------[INFO] AppModule.TimingFilter Request time: 2 ms [INFO] pages.About -----------onActivate(int param)-----------[INFO] pages.About -----------@SetupRender-----------[INFO] pages.About -----------onPassivate()----------- *[INFO] AppModule.TimingFilter Request time: 3 m
我给他分成了两块儿,不知道对也不对。第一个就是上面的URL产生的HTTP GET所获得的log信息,它会把我们想要的结果封装,并且给我们返回一个302,我估计redirect的地址就是
http://localhost:8080/input/eventlinks:add/12
这个URL被我们的浏览器重新发送给server端,这个时候,Tapestry才会通过response来渲染我们本地的页面。
还有一点很奇怪的东西,就是我们的页面有几个EventLink,ActionLink,Form就会在“*”处出现几次onPassivate方法。
忽然之间明白了:
由于每次都是PRG,所以URL上的参数总是会有所变化。而我们的onPassivate方法就是给这些EventLink,ActionLink,Form附上新的值。
例如: ...?t:ac=11