posts - 48, comments - 13, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          tapestry5錯誤提示信息沒有了

          Posted on 2009-03-04 13:59 董銳 閱讀(519) 評論(0)  編輯  收藏
          本來tapesty5有很精確的錯誤提示,但是我的怎么就沒有了呢?
          后來在網上找到這樣一句話:
          tapestry5有個production-mode,默認的為true,可以在作為產品發布時,提供精簡的錯誤信息,在開發時,異常信息當然是越精確越好,而且精確的異常信息也是tapestry的強項,可以很準確的告訴您錯誤出在哪里,所以在開發時這個選項要關掉,選中運行配置中的arguments標簽,在vm
          arguments中添加-Dtapestry.production-mode=false

          出處:http://tapestry.javaeye.com/blog/191803

          我于是在jvm arguments中添加了-Dtapestry.production-mode=false,果然可以了!!謝謝這位仁兄!



          //////////////////////////////////////////////////////////////////////////////////
          上述問題的另外解決方法:不在jvm中添加參數,而是在service包下增加下面這個文件:


          import java.io.IOException;

          import org.apache.tapestry5.*;
          import org.apache.tapestry5.ioc.MappedConfiguration;
          import org.apache.tapestry5.ioc.OrderedConfiguration;
          import org.apache.tapestry5.ioc.ServiceBinder;
          import org.apache.tapestry5.ioc.annotations.Local;
          import org.apache.tapestry5.services.Request;
          import org.apache.tapestry5.services.RequestFilter;
          import org.apache.tapestry5.services.RequestHandler;
          import org.apache.tapestry5.services.Response;
          import org.slf4j.Logger;

          /**
           * This module is automatically included as part of the Tapestry IoC Registry, it's a good place to
           * configure and extend Tapestry, or to place your own service definitions.
           */
          public class AppModule
          {
              public static void bind(ServiceBinder binder)
              {
                  // binder.bind(MyServiceInterface.class, MyServiceImpl.class);
                 
                  // Make bind() calls on the binder object to define most IoC services.
                  // Use service builder methods (example below) when the implementation
                  // is provided inline, or requires more initialization than simply
                  // invoking the constructor.
              }
             
             
              public static void contributeApplicationDefaults(
                      MappedConfiguration<String, String> configuration)
              {
                  // Contributions to ApplicationDefaults will override any contributions to
                  // FactoryDefaults (with the same key). Here we're restricting the supported
                  // locales to just "en" (English). As you add localised message catalogs and other assets,
                  // you can extend this list of locales (it's a comma separated series of locale names;
                  // the first locale name is the default when there's no reasonable match).
                 
                  configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en,zh_cn");

                  // The factory default is true but during the early stages of an application
                  // overriding to false is a good idea. In addition, this is often overridden
                  // on the command line as -Dtapestry.production-mode=false
                  configuration.add(SymbolConstants.PRODUCTION_MODE, "false");//有了這句就不用加jvm arguments了
                  
                  configuration.add(SymbolConstants.COMPRESS_WHITESPACE, "false");
                  configuration.add(SymbolConstants.CHARSET, "UTF-8");
                 
              }
             

              /**
               * This is a service definition, the service will be named "TimingFilter". The interface,
               * RequestFilter, is used within the RequestHandler service pipeline, which is built from the
               * RequestHandler service configuration. Tapestry IoC is responsible for passing in an
               * appropriate Logger instance. Requests for static resources are handled at a higher level, so
               * this filter will only be invoked for Tapestry related requests.
               *
               * <p>
               * Service builder methods are useful when the implementation is inline as an inner class
               * (as here) or require some other kind of special initialization. In most cases,
               * use the static bind() method instead.
               *
               * <p>
               * If this method was named "build", then the service id would be taken from the
               * service interface and would be "RequestFilter".  Since Tapestry already defines
               * a service named "RequestFilter" we use an explicit service id that we can reference
               * inside the contribution method.
               */   
              public RequestFilter buildTimingFilter(final Logger log)
              {
                  return new RequestFilter()
                  {
                      public boolean service(Request request, Response response, RequestHandler handler)
                              throws IOException
                      {
                          long startTime = System.currentTimeMillis();

                          try
                          {
                              // The responsibility of a filter is to invoke the corresponding method
                              // in the handler. When you chain multiple filters together, each filter
                              // received a handler that is a bridge to the next filter.
                             
                              return handler.service(request, response);
                          }
                          finally
                          {
                              long elapsed = System.currentTimeMillis() - startTime;

                              log.info(String.format("Request time: %d ms", elapsed));
                          }
                      }
                  };
              }

              /**
               * This is a contribution to the RequestHandler service configuration. This is how we extend
               * Tapestry using the timing filter. A common use for this kind of filter is transaction
               * management or security. The @Local annotation selects the desired service by type, but only
               * from the same module.  Without @Local, there would be an error due to the other service(s)
               * that implement RequestFilter (defined in other modules).
               */
              public void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration,
                      @Local
                      RequestFilter filter)
              {
                  // Each contribution to an ordered configuration has a name, When necessary, you may
                  // set constraints to precisely control the invocation order of the contributed filter
                  // within the pipeline.
                 
                  configuration.add("Timing", filter);
              }
          }



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 门头沟区| 丰都县| 连江县| 土默特右旗| 福清市| 张家界市| 庆阳市| 区。| 喜德县| 霍城县| 彭水| 南雄市| 上虞市| 新河县| 远安县| 游戏| 竹山县| 江山市| 南溪县| 博乐市| 海安县| 四川省| 南木林县| 杭州市| 莒南县| 陇川县| 宽城| 二连浩特市| 三明市| 新余市| 乐安县| 怀远县| 光山县| 惠安县| 沛县| 庆城县| 钦州市| 长春市| 磴口县| 铜梁县| 阳谷县|