Tapestry4初试小结

[转载]Tapestry4初试小结

Tapestry 4 beta5

一、注意空格。tapestry这点作的不太好。如果在一些属性中开始或结尾多写了个空格,就会发生错误,而且很难找出来。
二、中文乱码问题     

在*.application中加入下面语句:

   
   
三。Shell组件默认Render出来的meta有限,有时需要扩展,通过delegate属性,下面是个例子:

public   class  HeadMetaRender implements IRender {
    
public   void  render(IMarkupWriter writer, IRequestCycle cycle) {
        writer.begin(
" meta " );
        writer.attribute(
" http-equiv " , " Content-Language " );
        writer.attribute(
" content " , " zh-cn " );
        writer.closeTag();
        writer.begin(
" meta " );
        writer.attribute(
" http-equiv " , " Content-Type " );
        writer.attribute(
" content " , " text/html; charset=gb2312 " );
        writer.closeTag();
    }

四、今天尝试了Application State Object,Localization,FriendURL。
FriendUrl比较好弄,给的文档也比较详细。按照文档copy就可以了。没有仔细研究。
Locaition也很好弄,为每个页面写一个properties文件用于文件里面的文字,再为application写一个用于做系统通用信息。只是注意编码
   
       
                  dest="${webinfo.dir}/page"
                  includes="*.properties"
                  excludes="TNetCatcher.properties"/>
        
                  dest="${webinfo.dir}"
                  includes="*NetCatcher.properties"/>
   
在ant中加入如上target。
Application State Object 相关的东西弄了半天。我要做一个验证用户合法性的功能,就是看VisitObject(Session Scope)中又没有用户信息,如果没有用户信息就跳转到登录页面。这样的功能以往我是写一个LoginFilter里检查Session。但是在 Tapestry中不建议直接操作Session。虽然我也可以知道那个VisitObject在Session中的名字(一般为"state:App- Name:visit-Name"),但是还是不用Filter了。我就写了一个MyBasePage继承与BasePage然后添加了一个 MyPageValidateListener 实现 PageValidateListener 在MyPageValidateListener 的pageValidate方法中进行验证。
public   class  MyPageValidateListener implements PageValidateListener {

    
public   void  pageValidate(PageEvent  event ) {
        IRequestCycle cycle 
=   event .getRequestCycle();
        MyBasePage page 
=  (MyBasePage)  event .getPage();
        AppVisit visit 
=  page.getAppVisit();
        
if (visit.getCustomer() == null
                
&&! page.getPageName().equals( " Login " )
                
&&! page.getPageName().equals( " Register " )
                
&&! page.getPageName().equals( " GetPassword " )){
            IPage login 
=  cycle.getPage( " Login " );
            
throw   new  PageRedirectException(login);
        }
    }
}

这里,最好在最后Throw一个PageRedirectException,不要用cycle.activate()。
这样有一点要注意的是,必须在没有页面的page文件中加入
  把Visit 对象注射进去。我不知道Tapestry4为什么建议这样用,而不是用原有的getVisit方法。这样做的确使得程序灵活的很多可以自定义很多ASO。而不是仅仅局限于Global和Visit。但是我感觉也比较麻烦。当然原来的Visit和Global还是可以用的。

你可能感兴趣的:(Tapestry4初试小结)