`

chx 学习jForum笔记七-ForumAction二

阅读更多

2010.12.8 接昨天。

下面这句是存在于net.jforum.view.forum/ForumAction.java中

 

    public void list()
    {
        this.setTemplateName(TemplateKeys.FORUMS_LIST); //这句没看懂,从字面看应该是设置模板的名称
        this.context.put("allCategories", ForumCommon.getAllCategoriesAndForums (true));//页面显示的所有分类和板块(检查有无未读的贴子)

        this.context.put("topicsPerPage", Integer.valueOf(SystemGlobals.getIntValue(ConfigKeys.TOPICS_PER_PAGE))); //总主题数

…………

 

 

在net.jforum.view.forum.common/ForumCommon.java中

     public static List<Category> getAllCategoriesAndForums(boolean checkUnreadPosts) //取所有分类和板块(检查有无未读的贴子)
    {
        return getAllCategoriesAndForums (SessionFacade.getUserSession(), //取当前用户SESSION
                SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID), //取游客ID
                SessionFacade.getTopicsReadTime(),                       //取最后阅读时间
                checkUnreadPosts);                                       //检查有无未读的贴子
    }

 

在net.jforum.view.forum.common/ForumCommon.java中

    public static List<Category> getAllCategoriesAndForums(final UserSession userSession, final int anonymousUserId,
            final Map<Integer, Long> tracking, boolean origCheckUnreadPosts)
    {
        boolean checkUnreadPosts = origCheckUnreadPosts; //是否检查未读的贴子
        long lastVisit = 0;             //初始值0
        int userId = anonymousUserId;   //初始值游客ID
       
        if (userSession != null) {      //非游客
            lastVisit = userSession.getLastVisit().getTime(); //最后登录时间
            userId = userSession.getUserId(); //用户ID
        }
        // Do not check for unread posts if the user is not logged in
        checkUnreadPosts = checkUnreadPosts && (userId != anonymousUserId); //是否检查未读的贴子
        final List<Category> categories = ForumRepository.getAllCategories (userId);  //取所有分类
        if (!checkUnreadPosts) {   //不需返回未读帖子
            return categories;
        }
        final List<Category> returnCategories = new ArrayList<Category>();
        for (Iterator<Category> iter = categories.iterator(); iter.hasNext(); ) {
            Category category = new Category(iter.next()); //递归分类
            for (Iterator<Forum> tmpIterator = category.getForums().iterator(); tmpIterator.hasNext(); ) {
                Forum forum = tmpIterator.next(); //递归分类下的板块
                ForumCommon.checkUnreadPosts (forum, tracking, lastVisit);  //检查未读帖子
            }

            returnCategories.add(category);//需返回的分类
        }
        return returnCategories;
    }

 

在net.jforum.view.forum.common/ForumCommon.java中

    public static List<Category> getAllCategories(int userId)
    {
        final PermissionControl permissionControl = SecurityRepository.get(userId);  //取权限
        final List<Category> list = new ArrayList<Category>(); //所有分类
        Set<Category> categoriesSet = (Set<Category>)cache.get(FQN, CATEGORIES_SET);    //缓存中取分类集
        if (categoriesSet == null) { //缓存未取到
            synchronized (ForumRepository.instance) {
                if (categoriesSet == null) {
                    LOGGER.warn("Categories set returned null from the cache. Trying to reload");
                    try {
ForumRepository.instance.loadCategories (DataAccessDriver.getInstance().newCategoryDAO());//取分类到缓存
ForumRepository.instance.loadForums (DataAccessDriver.getInstance().newForumDAO());//取板块到缓存
                    }
                    catch (Exception e) {
                        throw new CategoryNotFoundException("Failed to get the category", e);
                    }
                    categoriesSet = (Set<Category>)cache.get(FQN, CATEGORIES_SET); //缓存中取分类集
                    if (categoriesSet == null) { //仍然为空则报错
                        throw new CategoryNotFoundException("Could not find all categories. There must be a problem with the cache");
                    }
                }
            }
        }
        for (final Iterator<Category> iter = ((Set<Category>)cache.get(FQN, CATEGORIES_SET)).iterator(); iter.hasNext(); ) {
            final Category category = getCategory (permissionControl, iter.next().getId());
            if (category != null) {
                list.add(category); //留下用户有权处理的分类
            }           
        }
        return list;
    }

 

其中ForumRepository. loadCategories及ForumRepository.instance.loadForums在前面(笔记一末及笔记二)有过分析。是将数据表中的分类读出至缓存中,loadForums将板块分类关系表读出至缓存中。

 

 

    public static Category getCategory(final PermissionControl permissonControl, final int categoryId)
    {
        if (! isCategoryAccessible (permissonControl, categoryId)) { //无权处理
            return null;
        }

   //有权处理
        return (Category)cache.get(FQN, Integer.toString(categoryId)); //从缓存中读出分类
    }

 

    public static boolean isCategoryAccessible(final PermissionControl permissionControl, final int categoryId)
    {  //是否有权处理分类
        return permissionControl.canAccess(SecurityConstants.PERM_CATEGORY, Integer.toString(categoryId));
    }


 

明天再看checkUnreadPosts(final Forum forum, final Map<Integer, Long> tracking, final long lastVisit)

分享到:
评论

相关推荐

    chx 学习jForum笔记十八 jForum与ms sqlserver

    《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...

    北大计算机系高级计算机系统结构课件chx14-arch08-mm1

    【北京大学计算机科学高级计算机系统结构课件chx14-arch08-mm1】主要探讨了计算机系统中的主存,特别是动态随机存取内存(DRAM)的延迟问题以及解决策略。这一讲义由北京大学计算机科学技术系和微处理器研究开发中心...

    北大计算机系高级计算机系统结构课件chx14-arch03-ilp1

    2. **名字相关(Name Dependences)**:当两个指令使用相同的寄存器或内存位置,但它们之间没有直接的数据流动时,就会发生名字相关。名字相关分为两种类型:反相关(Anti-dependence)和输出相关(Output-...

    北大计算机系高级计算机系统结构课件chx14-arch07-MT1

    【北京大学高级计算机系统结构课件】主要探讨了多线程技术在提高计算机系统性能上的应用。随着单一顺序控制线程中指令级并行度的挖掘日益困难,多线程处理技术(Multithreading)应运而生,它利用线程级并行(TLP)...

    CHX(x=0-4在Y-Al2O3(ll0D)表面吸附的密度泛函研究 (2007年)

    使用基于密度泛函理论(DFT)的Cast叩量子力学计算程序模块,对CHX(X=0-4)在Y-AI2O3(ll0D)表面吸附的位置,空间结构和能量进行了理论计算。计算结果表明.CHx=(x=0-3)与表面形成强的相互作用。CH3,CH2物种处于表面八面体...

    北大计算机系高级计算机系统结构课件chx14-arch02-cache1

    【计算机系统结构与高速缓存】 在现代计算机体系结构中,高速缓存(Cache)扮演着至关重要的角色,它的存在主要是为了缓解处理器(CPU)与主内存(DRAM)之间速度不匹配的问题。随着技术的发展,处理器的速度不断...

    北大计算机系高级计算机系统结构课件chx14-arch05-ilp1

    这篇内容主要介绍了现代指令级并行技术在计算机系统结构中的应用,特别是关于指令流水线的设计和优化。在第五讲中,讲师程旭探讨了如何通过更复杂的流水线和动态调度来挖掘指令级并行性,以提高处理器性能。...

    北大计算机系高级计算机系统结构课件chx14-arch06-vliw1

    点数较多,以下将详细解析相关知识点: **高级计算机系统结构** 这门课程涉及的是计算机系统的核心设计原理,包括微处理器、流水线技术、指令级并行性(ILP)以及超长指令字(VLIW)架构。课程的重点在于理解和优化...

    北大计算机系高级计算机系统结构课件chx14-arch09-multiproc1

    "高级计算机系统结构-多处理器系统" 本资源是北京大学计算机科学技术系计算机系统结构教研室高等计算机系统结构(第九讲)的课件,讲解多处理器系统的相关知识内容。 多处理器系统的发展 多处理器系统的发展可以...

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    北大计算机系高级计算机系统结构课件chx14-arch04-Tomasulo1

    北京大学计算机系的高级计算机系统结构课程中,第四讲主要讨论了Tomasulo算法,这是一种用于实现处理器指令级并行的技术。在讲解中,提到了几个关键概念,包括指令状态、功能单元状态以及寄存器结果状态。...

    HA-SoftEther-CHX虚拟专网

    HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    CHX TNF JNK之间的关系

    标题与描述中的关键词“CHX TNF JNK”揭示了在细胞凋亡机制中的相互作用,尤其是关于人类肝癌细胞对肿瘤坏死因子α(TNFα)诱导的凋亡反应。这一研究聚焦于理解CHX(环己亚胺)、TNFα以及JNK(c-Jun N端激酶)三者...

    chx99个人主页源码_chx99.zip

    源码通常包含了网站设计、布局、功能实现等核心部分,对于开发者而言是了解网站工作原理、学习前端技术或者进行二次开发的重要资源。 【描述】"chx99个人主页源码_chx99" 暗示这个源码可能是由用户 chx99 创建或...

    chx2095中文 英文资料

    根据给定的文件信息,我们可以提炼出以下关于CHX2095的详细IT知识: ### CHX2095概述 **CHX2095**是一款由United Monolithic Semiconductors S.A.S.制造的频率倍增器集成电路(IC),其工作频率范围在7.5至30GHz...

    CHX Hyper eXpressor-开源

    2. **指令和标签**:类似于JSP的标签,CHX可能会有一套预定义的指令和标签,比如用于输出变量、条件语句、循环结构等。 3. **模板系统**:CHX可能包含一套模板引擎,使得开发者可以创建可复用的页面布局和组件。 4. ...

    CHX-3大手臂大法兰.SLDDRW

    CHX-3大手臂大法兰.SLDDRW

    易语言搜索论坛最新主题

    搜索论坛最新主题系统结构:子程序1,chx,系统关于对话框, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮1_被单击 || ||------子程序1 || ||------chx || ||------_按钮2_被单击 || ||

Global site tag (gtag.js) - Google Analytics