EclipseWTP中开发Tapestry要点记录

EclipseWTP中开发Tapestry要点记录
    最近对tapestry4.0研究了一下,准备在自己的cy项目中应用,老了,记性差了,就得记录一下了:
    1、开发期禁用框架缓存:
         如果修改了配置和html模版后,必须重新启动服务器,将把人郁闷致死。在tomcat启动时加入系统参数:
           -Dorg.apache.tapestry.disable-caching=true   -Dorg.apache.tapestry.enable-reset-service=true
           如果在eclipse WTP中启动tomcat,就加在服务运行的VM arguments中。
    2、Tomcat HotSwap配置:
         没有什么特殊的,编辑tomcat的配置,在Modules子页中去掉项目的Auto Reload选项,打开Overview子页Server区域中的Enable Tomcat debug mode,这样,更新了class文件后,就不用重新启动服务器或者重新加载context了。配合(1、)可以出现即时修改即时观看结果的效果了,很方便D。
    3、编码问题:
         Tapestry4.0的一些默认编码是iso-8859-1的,一般我们要用UTF-8的,这样修改就行了。在${yourServletName}.application文件中加入如下配置:
        <meta key="org.apache.tapestry.messages-encoding" value="UTF-8" />
        <meta key="org.apache.tapestry.output-encoding" value="UTF-8" />
        <meta key="org.apache.tapestry.template-encoding" value="UTF-8" />
    4、@Annotation标注的使用
        使用标注(Java5)相当减轻工作量,虽然没有详细文档,但是对于.page中的配置官方还是有较详细的阐述的,对应起来使用即可。
    5、抽象类?
        一个页面对应一个class文件,这个class文件是BasePage的抽象子类,Tapestry中的特殊怪异用法,因为框架会自己生成实现类来管理变量寿命周期,因此,如果要声明页面参数(就是原来request中的传来的参数),一定要按照下面方式:
        @Persist
        public abstract String getName();
        public abstract void setName(String name);
        其中@Persist意思是把这个参数保存在session中以备后用
        注意:万万不可自己随便去做个完整的java property getter and setter出来,不然会遇到严重的多线程问题,切忌切忌切忌!
    6、页面转向和导航
        先说服务器内部转向。很简单,两种方式搞定:
        a)不用参数:在page类的Linstener的方法中返回页面名字,String
        b)带参数:在page类中注入目标页面:
        @InjectPage("FirstPage")
        public abstract FirstPage getFirstPage();
        ....
        public IPage doClick(){
              FirstPage page = getFirstPage();
              page.setMyGF("Rain");
              return page;
        }
        如果需要配合工作流引擎决定页面转向,就需要使用Tapestry API获得IPage实例:      FirstPage page = (FirstPage) this.getRequestCycle().getPage(
    "FirstPage");
              page.setMyGF("Rain");
              return page;
      
        该说客户端重定向了:
        也分成两种:
         a)无参数:
        @InjectObject("engine-service:page")
        public abstract IEngineService getPageService();
        ...
        public ILink doClick(){
              FirstPage page = (FirstPage) getPageService().getLink(false,"FirstPage");
              //page.setMyGF("Rain");//FirstPage的myGF参数除非指明了 “@Persist ”,否则设置参数将无效!
              return page;
        }
        b)有参数:
        @InjectObject("engine-service:external")
        public abstract IEngineService getExternalService();
        ...
        public ILink doClick(){ 
             IEngineService service =  getExternalService();
             ExternalServiceParameter parameter = new ExternalServiceParameter("UserRegister", new Object[] { "param","abc"});
             ILink page = service.getLink(false, parameter);
             return page;
        }
         同时,要注意的是,该页面必须implement IExternalPage,并实现接受参数的方法public void activateExternalPage(Object[] parameters, IRequestCycle cycle)!
 
 
         如果要跳转到系统外部的地址去的话,直接throw new RedirectException("http://spaces.msn.com/teedywang/");就行了,tapestry特有的怪异的重定向,寒一个给他,当然,也可以调用this.getRequestCycle().sendRedirect("http://spaces.msn.com/teedywang/");
 
         ok,暂时就这么多,以后再写其他的要点或技巧之类的东西了。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值