亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何自由組織Tapestry頁面規范文件

2019-11-18 13:12:40
字體:
來源:轉載
供稿:網友

  問題的提出:
  默認Tapestry的頁面模板文件(.Html)及其對應的規范文件(.page),可以放在web根目錄或其下的WEB-INF/目錄中,Tapestry可以不用任何配置(在以前的版本中需要在.application文件中定義一下頁面)就能正確運行,假如你需要在這些根目錄下以文件系統的目錄形式組織你的頁面,則Tapestry是不會自動搜索這些子目錄的,你必須在.application文件中定義這些不在默認位置的頁面。這樣一來,每加一個頁面都需要定義一下,假如頁面數目眾多,定義起來就會比較麻煩,如何才能避免這些配置呢?本文的目的就是嘗試解決這個問題。
  
  問題的解決:
  本文是在參考文檔(http://www.behindthesite.com/blog/C1931765677/E381917869/index.html)源代碼的基礎上稍作修改而成,主要是為了解決不能在Tomcat中使用的問題。為了更好的了解,朋友們最好能閱讀一下原文和原來的代碼。主要修改的地方是給RecursiveFileLocator傳遞一個真實路徑地址,以便能夠列出目錄下面的子目錄,從而實現層次查找。
  
  解決的途徑就是定義一個ISpecificationResolverDelegate,以便Tapestry在常規路徑下找不到文件時進行處理。
    CustomSpecificationResolver.java:
  
  // CustomSpecificationResolver.java
  //
  // Copyright 2004 Michael J. Henderson & Associates LLC
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may oBTain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either eXPRess or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package com.mjhenderson.users.tapestry;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.tapestry.INamespace;
  import org.apache.tapestry.IRequestCycle;
  import org.apache.tapestry.IResourceLocation;
  import org.apache.tapestry.Tapestry;
  import org.apache.tapestry.engine.ISpecificationSource;
  import org.apache.tapestry.resolver.ISpecificationResolverDelegate;
  import org.apache.tapestry.spec.IComponentSpecification;
  
  /**
   * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.CustomSpecificationResolver">Mike Henderson</a>
   *
   */
  public class CustomSpecificationResolver implements
      ISpecificationResolverDelegate {
    
  
    private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
  
    private ISpecificationSource _specificationSource;
  
    private RecursiveFileLocator _locator;
    //private boolean _applicationIsExplodedWAR;
    private boolean _initialized;
    private String _folder;
    private String _realRootFolder;
    
    public CustomSpecificationResolver() {;
    }
    
    public void setFolder(String value) {
      _folder = value;
    }
    
    public String getFolder() {
      return _folder;
    }
    
    private void _init(IRequestCycle cycle) {
        //IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/WEB-INF/");
      IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/");
      //_applicationIsExplodedWAR = rootLocation.getResourceURL().toString().startsWith("file:");
      //if (_applicationIsExplodedWAR) {
      _realRootFolder = cycle.getRequestContext().getServlet().getServletContext().getRealPath("/");
      _locator = new RecursiveFileLocator(rootLocation,_realRootFolder);
      _specificationSource = cycle.getEngine().getSpecificationSource();
      //}
      _initialized = true;
    }
    
  //  private boolean checkLocationIsFileLocation(IResourceLocation location) {
  //    String url = location.getResourceURL().toString();
  //    System.out.println("url = "+url);
  //    return url.startsWith("file:");
  //  }
    
    /**
     * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
     */
    public IComponentSpecification findPageSpecification(IRequestCycle cycle,
        INamespace namespace, String name) {
  
      if (!_initialized) {
        _init(cycle);
      }
      //if (!_applicationIsExplodedWAR) {
      //  return null;
      //}
      IResourceLocation location = _locator.resolveLocation(name+".page");
      if (location != null) {
        return _specificationSource.getPageSpecification(location);
      }
      return null;
    }
  
    /**
     * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findComponentSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
     */
    public IComponentSpecification findComponentSpecification(
        IRequestCycle cycle, INamespace namespace, String type) {
      
      if (!_initialized) {
        _init(cycle);
      }
      //if (!_applicationIsExplodedWAR) {
      //  return null;
      //}
      IResourceLocation location = _locator.resolveLocation(type+".jwc");
      if (location != null) {
        return _specificationSource.getComponentSpecification(location);
      }
      return null;
    }
  
  }
  RecursiveFileLocator.java:
  
  // RecursiveFileLocator.java
  //
  // Copyright 2004 Michael J. Henderson & Associates LLC
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package com.mjhenderson.users.tapestry;
  
  import java.io.File;
  import java.net.URL;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.tapestry.IResourceLocation;
  
  /**
   * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.RecursiveFileLocator">Mike Henderson</a>
   *
   */
  public class RecursiveFileLocator {
    
    private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
  
    private IResourceLocation  _location;
    
    private File realRoot ;
    
    private Map _locations   = new HashMap();
    
    public RecursiveFileLocator(IResourceLocation location,String _realRootFolder) {
      realRoot = new

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人久久精品| 亚洲区免费影片| 欧美成人激情在线| 国产亚洲欧美另类中文| 欧美疯狂xxxx大交乱88av| 国产精品999999| 亚洲欧美日韩网| 亚洲福利视频网| 欧美在线一级va免费观看| 国产日韩在线视频| 日韩视频一区在线| 久久久亚洲精品视频| 国产在线日韩在线| 91色在线观看| 91国产美女视频| 国产成人一区二区三区电影| 欧美精品久久一区二区| 久国内精品在线| 日韩av影视在线| 亚洲一区二区三区在线免费观看| 亚洲电影免费观看高清完整版在线观看| 精品国产网站地址| 日韩欧美在线免费观看| 欧美激情aaaa| 爽爽爽爽爽爽爽成人免费观看| 欧美巨大黑人极品精男| 91午夜理伦私人影院| 国产www精品| 最近中文字幕mv在线一区二区三区四区| 亚洲性xxxx| 欧美在线精品免播放器视频| www.日韩不卡电影av| 国产亚洲精品va在线观看| 日韩福利视频在线观看| 亚洲 日韩 国产第一| 自拍偷拍亚洲精品| 国产精品久久一区| 91成人免费观看网站| 亚洲bt天天射| 中文字幕无线精品亚洲乱码一区| 日韩精品在线第一页| 在线观看视频亚洲| 亚洲人免费视频| 欧美激情影音先锋| 国产精品日日做人人爱| 精品高清美女精品国产区| 91精品久久久久久| 国产精品成人av性教育| 51色欧美片视频在线观看| 57pao成人国产永久免费| 欧美性黄网官网| 久久夜色精品国产亚洲aⅴ| 日韩电视剧在线观看免费网站| 视频直播国产精品| 日韩在线观看高清| 亚洲第一免费播放区| 久久久久久这里只有精品| 国产在线精品成人一区二区三区| 国产日本欧美一区| 日韩欧美中文在线| 欧美电影院免费观看| 精品视频—区二区三区免费| 欧美大片va欧美在线播放| 亚洲第一精品夜夜躁人人爽| 日韩精品在线免费| 亚洲白虎美女被爆操| 久久久噜久噜久久综合| 国产精品午夜国产小视频| 尤物九九久久国产精品的分类| 日韩一区二区av| 色悠久久久久综合先锋影音下载| 亚洲一区二区三区视频| 91午夜理伦私人影院| 色av吧综合网| 粗暴蹂躏中文一区二区三区| 在线播放国产一区中文字幕剧情欧美| 成人欧美一区二区三区黑人| 日韩av免费看网站| 亚洲网站在线看| 欧美日韩国产在线| 国产精品久久久av久久久| 日韩中文字幕在线看| 国产精品免费视频久久久| 色悠悠久久久久| 久久亚洲精品小早川怜子66| 久久99国产精品自在自在app| 国内精品久久久久影院 日本资源| 国产一区二区三区在线| 国产亚洲欧美aaaa| 狠狠爱在线视频一区| 奇米四色中文综合久久| 午夜精品久久久久久99热软件| 亚洲国产古装精品网站| 亚洲午夜精品视频| 欧美日韩性视频| 成人国产精品日本在线| 日韩av免费在线看| 中文字幕亚洲无线码在线一区| 亚洲国产精品久久久| 日本中文字幕不卡免费| 欧美裸身视频免费观看| 日韩激情在线视频| 精品久久久久久久久久久久久| 麻豆乱码国产一区二区三区| 国产精品欧美日韩一区二区| 日本精品久久久久久久| 国产精品毛片a∨一区二区三区|国| 伊人久久久久久久久久| 91精品国产综合久久香蕉| 久久躁狠狠躁夜夜爽| 国产日韩欧美夫妻视频在线观看| 亚洲午夜女主播在线直播| 久久久久久中文| 亚洲成av人影院在线观看| 精品无人区太爽高潮在线播放| 亚洲自拍偷拍网址| 国产xxx69麻豆国语对白| 日本老师69xxx| 亚洲国产另类 国产精品国产免费| 久久久视频在线| 正在播放欧美视频| 精品呦交小u女在线| 午夜精品久久久久久久白皮肤| 最近2019中文免费高清视频观看www99| 久久91精品国产| 日韩欧美黄色动漫| 91精品国产91久久久久福利| 成人有码在线播放| 黄色一区二区三区| 亚洲天堂av高清| 精品国产电影一区| 色播久久人人爽人人爽人人片视av| 久久久爽爽爽美女图片| 欧美在线观看网站| 精品久久久av| 最新的欧美黄色| 亚洲人成网站色ww在线| 日韩在线播放视频| 这里只有精品丝袜| 亚洲成人av片| 中文字幕亚洲无线码a| 亚洲激情久久久| 日韩在线观看网址| 亚洲新声在线观看| 国产欧美日韩中文| 7777kkkk成人观看| 国产欧美久久一区二区| 日韩在线视频免费观看高清中文| 日韩美女中文字幕| 成人亲热视频网站| 亚洲www在线观看| 国产亚洲精品久久久久动| 中文字幕少妇一区二区三区| 国产视频999| 精品自拍视频在线观看| 成人免费淫片aa视频免费| 九九热99久久久国产盗摄| 国产精品久久久久久亚洲调教| 国产精品成久久久久三级| 日韩在线观看网站| 久久精品视频在线观看| 亚洲影院污污.| 欧美国产第一页| 九九九久久久久久|