Tapestry

          記錄學(xué)習(xí)Tapestry專(zhuān)用布格格。很多文章都轉(zhuǎn)載網(wǎng)絡(luò)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 4 評(píng)論 :: 0 Trackbacks

          Tapestry 4 beta5

          一、注意空格。tapestry這點(diǎn)作的不太好。如果在一些屬性中開(kāi)始或結(jié)尾多寫(xiě)了個(gè)空格,就會(huì)發(fā)生錯(cuò)誤,而且很難找出來(lái)。
          二、中文亂碼問(wèn)題?????

          在*.application中加入下面語(yǔ)句:

          ???
          ???
          三。Shell組件默認(rèn)Render出來(lái)的meta有限,有時(shí)需要擴(kuò)展,通過(guò)delegate屬性,下面是個(gè)例子:

          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比較好弄,給的文檔也比較詳細(xì)。按照文檔copy就可以了。沒(méi)有仔細(xì)研究。
          Locaition也很好弄,為每個(gè)頁(yè)面寫(xiě)一個(gè)properties文件用于文件里面的文字,再為application寫(xiě)一個(gè)用于做系統(tǒng)通用信息。只是注意編碼
          ???
          ???????
          ????????????????? dest="${webinfo.dir}/page"
          ????????????????? includes="*.properties"
          ????????????????? excludes="TNetCatcher.properties"/>
          ????????
          ????????????????? dest="${webinfo.dir}"
          ????????????????? includes="*NetCatcher.properties"/>
          ???

          在ant中加入如上target。
          Application State Object 相關(guān)的東西弄了半天。我要做一個(gè)驗(yàn)證用戶(hù)合法性的功能,就是看VisitObject(Session Scope)中又沒(méi)有用戶(hù)信息,如果沒(méi)有用戶(hù)信息就跳轉(zhuǎn)到登錄頁(yè)面。這樣的功能以往我是寫(xiě)一個(gè)LoginFilter里檢查Session。但是在 Tapestry中不建議直接操作Session。雖然我也可以知道那個(gè)VisitObject在Session中的名字(一般為"state:App- Name:visit-Name"),但是還是不用Filter了。我就寫(xiě)了一個(gè)MyBasePage繼承與BasePage然后添加了一個(gè) MyPageValidateListener?實(shí)現(xiàn) PageValidateListener 在MyPageValidateListener?的pageValidate方法中進(jìn)行驗(yàn)證。
          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一個(gè)PageRedirectException,不要用cycle.activate()。
          這樣有一點(diǎn)要注意的是,必須在沒(méi)有頁(yè)面的page文件中加入
          ?把Visit 對(duì)象注射進(jìn)去。我不知道Tapestry4為什么建議這樣用,而不是用原有的getVisit方法。這樣做的確使得程序靈活的很多可以自定義很多ASO。而不是僅僅局限于Global和Visit。但是我感覺(jué)也比較麻煩。當(dāng)然原來(lái)的Visit和Global還是可以用的。
          posted on 2007-01-29 18:49 Tapestry 閱讀(440) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Tapestry
          主站蜘蛛池模板: 阳朔县| 中卫市| 富锦市| 青神县| 五华县| 吉木萨尔县| 莆田市| 灌阳县| 柞水县| 哈巴河县| 三门峡市| 万宁市| 清水县| 鲁山县| 溆浦县| 新邵县| 南阳市| 渑池县| 杭州市| 句容市| 宜兰市| 阆中市| 龙江县| 台南县| 德州市| 清河县| 信宜市| 江阴市| 峨眉山市| 于都县| 自贡市| 鄂托克前旗| 南投市| 郎溪县| 蓬溪县| 米易县| 罗定市| 威信县| 保亭| 额敏县| 黔南|