浏览 4129 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-12-07
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-12-07
请详细说明你希望调用的是怎样的方法。
Tapestry中,方法的种类基本上分为两种。一种是Tapestry自带的并默认执行的,比如说: initialize() detach() attach() pageBeginRender() pageAfterRender() 等等,这些方法一般来自AbstractPage类或者AbstractComponent。而它们的自行顺序有很大的差别。 如果是自定义的方法,不存在ognl调用先后顺序的问题。你在ognl后面写啥子方法就调用啥子方法,而且基本上,一个ognl后面只跟一个方法。 另外,需要指明的是,ognl是Tapestry的一种辅助工具,ognl和Tapestry是相互独立的,不同的概念。 |
|
返回顶楼 | |
发表时间:2004-12-08
initialize()
detach() attach() pageBeginRender() pageAfterRender() 以上这些都试过了 ,不适合初始化数据,页面提交时候会初始化多次 所以我现在把数据的初始化都写在ognl对应的方法里面 但是这样不能控制数据初始化的先后次序 |
|
返回顶楼 | |
发表时间:2004-12-08
引用 initialize()
detach() attach() pageBeginRender() pageAfterRender() 以上这些都试过了 ,不适合初始化数据,页面提交时候会初始化多次 你想要初始化怎样的数据?这些方法如果都还不够你用的话,那么我就实在是猜不到你想做什么了。。。 我不知道你的所谓“页面提交”是指什么。 第一,页面是页面,页面跳转的时候,需要清空properties数据,否则,这些数据保存在session里面,很容易造成bug。打个比方说吧,initialize()这个方法,的确,在页面表现的时候,执行两次。页面表现之前,初始化你的页面,然后页面表现你的业务逻辑,比如你要显示什么新闻呀等等。。。最后,页面在结束表现之前,再次执行这个方法,将你的properties还原为初始值,这样,在你的下次再访问该页面的时候,不会因为properties的值已经改变而造成意想不到的错误。 第二,提交一般是指表单,也就是formSubmit。如果你希望这个表单在提交之前就有初始值,也很容易,将ognl对应的get方法对应的成员变量初始化一个值就可以。比如说用initialize()来初始化。在你submit之后,ognl会自动调用properties相应的set方法赋值,你在form对应的监听方法进行数据处理就可以了。 第三,其它的Tapestry自带方法就不说了。什么validate()等等,都不提,只讲这5个方法: initialize() detach() attach() pageBeginRender() pageAfterRender() 它们的执行是有先后顺序的,其中只有initialize()方法会执行两次,其它的都执行一次。这些特点,足够你利用来做很多事。 页面在表现(render)的时候,我只以direct service举例: 1)执行initialize(),初始化该页面的properties,这些properties都应该是客户端的瞬时状态。 2)执行attach(IEngine value),获取你的engine。所以,你可以利用这个方法往你的web容器里面加载服务。 3)执行pageBeginRender(),同样是用来在页面表现之前,给你希望的变量赋值。。比如说,我基本上是用这个方法来获取Visit对象中储存的session值。 4)页面表现业务逻辑。你的什么Foreach啊,等等,现在才开始执行。 5)执行pageEndRender()。在你的页面业务逻辑表现完之后,如果你希望有什么后续工作,可以在这里执行。 6)执行detach()的super(),也就是执行AbstractPage里面Tapestry自己的detach(),目的是为了清空该页面所调用的engine,visit,requestCycle。因为如果不清空的话,比如什么用户信息的话,就可能会泄露。这个方法的存在是Tapestry基于安全性的考虑。 7)执行initialize(),再次将你的properties恢复为初始值。 8)执行detach()里面,你自己写的内容。。 以上仅仅最简单的情况下,这5种方法的执行顺序。。。 至于OGNL,它有很多功能,Tapestry使用ognl主要的目的是为了利用ognl来简化JavaBeans的get/set机制 如:public Object getAttribute(String name) public void setAttribute(String name, Object value) 简化为:session.attribute[“foo”] 最后,顺带说一句,我理解能力不太好,所以希望你能尽量详细描述你的问题。如果我看不懂你在讲什么,我怎么回答你呢? |
|
返回顶楼 | |
发表时间:2004-12-08
对了,顺带说一句:
Tapestry并不好学,所以遇到困难不要丧失信心,至少不要轻易丧失对Tapestry的信心。。。Tapestry本身是好东西,任何框架的存在必然有它能够生存的原因,只是也许很多特点和功能还没有掌握罢了。。。就好比你非要把摩托车当自行车用脚蹬,那么就千万怪摩托车不够好,这不是摩托车的错。 有技术上的问题,说出来,至少我是知无不言。。。大家一起学习一起进步罢了。 |
|
返回顶楼 | |
发表时间:2004-12-09
gzdlw:
太感谢了,谢谢你写了这么详细,对我帮助很大, 我再试试看用pagebeginrender()来初始化数据!!! ognl的调用顺序已经摸清了 就是按控件的先后顺序调用的,如果有子控件的话就优先调用子控件,正是因为这个原因,才使我写的信息显示控件不能正常的工作 贴个图给你! |
|
返回顶楼 | |
发表时间:2004-12-09
问题差不多解决了
我现在初始化放在 pagebeginrender() 只要增加一个标志来判断是否初始化 就是说只执行一次初始化 |
|
返回顶楼 | |