コード例 #1
0
        // 0) path => Blog.Admin
        // 1) path => Blog
        // 2) path => ""
        private static String addLayoutPrivate(String path, String actionContent, MvcContext ctx, Boolean isLastLayout)
        {
            // String content = layoutCacher.getByPath( path )
            // if( strUtil.HasText( content ) ) return HtmlCombiner.combinePage( content, actionContent );

            ControllerBase controller = ControllerFactory.FindLayoutController(path, ctx);

            if (controller == null)
            {
                return(actionContent);
            }

            ctx.controller.utils.addHidedLayouts(controller);   // 将controller中提到需要隐藏的控制器隐藏
            if (ctx.controller.utils.isHided(controller.GetType()))
            {
                return(actionContent);
            }

            // 检查缓存
            String cacheKey = null;

            if (MvcConfig.Instance.IsActionCache)
            {
                IActionCache actionCache = ControllerMeta.GetActionCache(controller.GetType(), "Layout");

                cacheKey = getCacheKey(actionCache, ctx);
                if (strUtil.HasText(cacheKey))
                {
                    Object cacheContent = checkCache(cacheKey);
                    if (cacheContent != null)
                    {
                        logger.Info("load from nsLayoutCache=" + cacheKey);

                        return(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent));
                    }
                }
            }

            controller.utils.switchViewToLayout();

            ActionRunner.runLayoutAction(ctx, controller, controller.Layout);

            if (ctx.utils.isEnd())
            {
                return(controller.utils.getActionResult());
            }

            String actionResult = controller.utils.getActionResult();

            // 加入缓存
            if (MvcConfig.Instance.IsActionCache)
            {
                if (cacheKey != null)
                {
                    addContentToCache(cacheKey, actionResult);
                }
            }

            return(HtmlCombiner.combinePage(actionResult, actionContent));
        }
コード例 #2
0
        public override void Process(ProcessContext context)
        {
            MvcEventPublisher.Instance.BeginAddLayout(context.ctx);
            if (context.ctx.utils.isSkipCurrentProcessor())
            {
                return;
            }

            MvcContext     ctx        = context.ctx;
            ControllerBase controller = context.getController();

            if (controller.utils.isHided(controller.GetType()))
            {
                return;
            }

            int   intNoLayout = ctx.utils.getNoLayout();
            IList paths       = ctx.utils.getLayoutPath();

            if (intNoLayout >= paths.Count + 1)
            {
                return;
            }

            String actionContent = context.getContent();


            //检查缓存
            CacheInfo ci           = CacheInfo.InitLayout(ctx);
            Object    cacheContent = ci.CheckCache();

            if (cacheContent != null)
            {
                logger.Info("load from layoutCache=" + ci.CacheKey);
                context.setContent(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent));
                return;
            }

            String layoutContent = ControllerRunner.RunLayout(ctx);

            // 加入缓存
            if (ci.IsActionCache)
            {
                ci.AddContentToCache(layoutContent);
            }

            if (ctx.utils.isEnd())
            {
                context.endMsgByText(layoutContent);
            }
            else
            {
                context.setContent(HtmlCombiner.combinePage(layoutContent, actionContent));
            }
        }
コード例 #3
0
        // 0) path => Blog.Admin
        // 1) path => Blog
        // 2) path => ""
        private static String addLayoutPrivate(String path, String actionContent, MvcContext ctx, Boolean isLastLayout)
        {
            ControllerBase controller = ControllerFactory.FindLayoutController(path, ctx);

            if (controller == null)
            {
                return(actionContent);
            }

            ctx.controller.utils.addHidedLayouts(controller);   // 将controller中提到需要隐藏的控制器隐藏
            if (ctx.controller.utils.isHided(controller.GetType()))
            {
                return(actionContent);
            }

            // 检查缓存
            ActionCacheChecker ci           = ActionCacheChecker.InitLayout(ctx, controller);
            Object             cacheContent = ci.GetCache();

            if (cacheContent != null)
            {
                logger.Info("load from nsLayoutCache=" + ci.CacheKey);
                return(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent));
            }

            controller.utils.switchViewToLayout();

            ActionRunner.runLayoutAction(ctx, controller, controller.Layout);

            if (ctx.utils.isEnd())
            {
                return(ctx.utils.getCurrentOutputString());
            }

            String actionResult = controller.utils.getActionResult();

            if (ci.IsActionCache)
            {
                ci.AddCache(actionResult);
            }

            return(HtmlCombiner.combinePage(actionResult, actionContent));
        }
コード例 #4
0
        public override void Process(ProcessContext context)
        {
            MvcEventPublisher.Instance.BeginAddLayout(context.ctx);
            if (context.ctx.utils.isSkipCurrentProcessor())
            {
                return;
            }

            MvcContext     ctx        = context.ctx;
            ControllerBase controller = context.getController();

            if (controller.utils.isHided(controller.GetType()))
            {
                return;
            }

            int   intNoLayout = ctx.utils.getNoLayout();
            IList paths       = ctx.utils.getLayoutPath();

            if (intNoLayout >= paths.Count + 1)
            {
                return;
            }


            String actionContent = context.getContent();


            //检查缓存
            String cacheKey = null;

            if (MvcConfig.Instance.IsActionCache)
            {
                IActionCache actionCache = ControllerMeta.GetActionCache(controller.GetType(), "Layout");

                cacheKey = getCacheKey(actionCache, ctx);
                if (strUtil.HasText(cacheKey))
                {
                    Object cacheContent = checkCache(cacheKey);
                    if (cacheContent != null)
                    {
                        logger.Info("load from layoutCache=" + cacheKey);
                        context.setContent(HtmlCombiner.combinePage(cacheContent.ToString(), actionContent));
                        return;
                    }
                }
            }

            String layoutContent;

            if (controller.LayoutControllerType == null)
            {
                layoutContent = runCurrentLayout(controller, ctx, context, actionContent);
            }
            else
            {
                layoutContent = runOtherLayout(controller, ctx, context, actionContent);
            }

            // 加入缓存
            if (MvcConfig.Instance.IsActionCache)
            {
                if (strUtil.HasText(cacheKey))
                {
                    addContentToCache(cacheKey, layoutContent);
                }
            }

            if (ctx.utils.isEnd())
            {
                context.endMsgByText(layoutContent);
            }
            else
            {
                context.setContent(HtmlCombiner.combinePage(layoutContent, actionContent));
            }
        }