从T5 Build web appliction里面学到的

T5的优点:

  1. 以声明的方式处理按钮动作
  2. 除去代码复制
  3. 定义组件容易
  4. ajax集成
  5. 验证
  6. 国际化
  7. IOC
  8. spring支持
  9. hibernate支持

事件处理器返回的类型

  1. nothing 当前页面处理request
  2. String logic name of page
  3. class java class of page
  4. Page IPage 接口
  5. Stream StreamResponse可以生成pdf或者excel文件等

页面池,不用用户使用同一个页面实例,所以在页面间传递参数时要加@Persist标注进行保存,具体会存放在session里面

这样有一个问题,如果用户太多,而这些数据都存放在server端的话,会占用大量的空间,所以在可以不用这存储的时候就不要用,也可以考虑用值传递的方式,

@InjectPage Another another

.

.

another.set×××();

在调用这个方法的时候会实例化Another这个类,会把参数传递过去,而Another在接收的时候用onPassivate()方法,然后跳转,另一个实例调用onActivate()方法实现把数据返回到客户端。

实际在调用的过程中,会去检查Another这个实例是否有onPassivate()这个方法,如果有就进行参数操作,然后返回到Pool里面,如果没有这个方法的话,直接返回到pool里面。

用户在请求的时候,就直接到pool里面去取,再通过onActivate()方法返回值到客户端。

 

定义组件的方式:

  1. 隐式的:<t:textfield t:value="***"/>,这样的话,在dreamweaver里面是看不到的
  2. 显示的:<a href="#" t:type="pagelink" t:id="linkid" t:page="Another"/>.这样的话在静态页面里面能看到

注意在调用的时候,在java里面,

@component component={"page=Another"}

private PageLink linkid

这里的"linkid"名称一定要跟前面定义的那个id的名称一样

 

 

全局数据(Application state object   ASO)同样存在session里面,如果session过期,当再次请求时,会再次创建,但始终保持一个实例,有且仅有一个实例

@ApplicateState

private User user;

当用户第一次请求这个对象时,就会创建User对象的实例,如果后面调用这个对象实例,返回的都是同一个实例,也就是说在任何地方所作的修改都会反应在这个对象里面。后面即使再次声明,返回的都是同一个对象如:

@ApplicateState

private User myuser;

实际上在调用的时候,myuser跟上面定义的user是同一个对象的。

 

 

<t:if t:test="userExist">

<p> The name is :${user.firstname}</p>

</t:if>

在上面片断中,"userExist"是全局变量,检查user是否存在。它有命名约定,user+Exist两部分组成。而在java文件中不需要声明这样一个变量的。它会自动去检查全局变量里面是否存在user这个对象,是否初始化了。但是在这个时候它是不会去初始化这个user对象的,也就是说他只是检查,不会去作实例化的操作。

 

数据源最好以service的方式存在而不是以ASO的方式存在,因为他会占用session空间

 

我们在查看详情的时候,一般用ActionLink,它在当前页面写事件处理方法,然后把得到的值传给详情页面,返回详情,此处详情页面需要设一个@Persist的变量来接收传递的值,这样不方便,可以用PageLink,把值传递过去,当前页面也不用写处理方法,详情页面要写一个onActivate(Long id)方法接收参数

 

Tapestry值处理方式,一是prop,二是literal

默认以prop方式,它会在page里面寻找get,set方法来得到值

而literal方式会列出后台跟的值把它当作字符串来处理

你可能感兴趣的:(spring,Web,Excel,tapestry,Dreamweaver)