`

chx 学习jForum笔记二

阅读更多

我的源程序是安道森练功房http://www.andowson.com/的2.2.1版本

2010.12.5接周五,继续研究。

	private void loadForums(ForumDAO fm) //取板块
	{
		List<Forum> list = fm.selectAll(); //从数据表读取所有板块
		
		Map<String, String> m = (Map<String, String>)cache.get(FQN, RELATION); //读缓存板块分类关系表
		if (m == null) { //缓存中没有
			m = new HashMap<String, String>();
		}
		
		int lastId = 0;   //分类ID初值
		Category category = null;
		String catId = null;

		for (Iterator<Forum> iter = list.iterator(); iter.hasNext(); ) {
			Forum forum = iter.next();
			
			if (forum.getCategoryId() != lastId) {  //不属于当前分类
				if (category != null) {
					cache.add(FQN, catId, category); //将所属分类写入缓存
				}
				
				lastId = forum.getCategoryId();  //设置当前分类ID
				catId = Integer.toString(forum.getCategoryId());
				category = (Category)cache.get(FQN, catId); //读缓存中有无当前分类实体
			}
			
			if (category == null) { //前面已将所有分类读入缓存,所以如果缓存中没有则数据表中也没有对应分类,如对应的分类不存在则报错。
				throw new CategoryNotFoundException("Category for forum #" + forum.getId() + " not found");
			}
			
			String forumId = Integer.toString(forum.getId());
			category.addForum(forum); //将板块加入分类
			m.put(forumId, catId); //M的格式是板块ID,分类ID
		}
		
		if (category != null) {
			cache.add(FQN, catId, category);   //将分类写入缓存
		}
		
		cache.add(FQN, RELATION, m);  //将板块分类关系表写入缓存
	}
 

我又看了一下category.addForum(forum)过程,

	public void addForum(Forum forum) {
		this.forumsIdMap.put(Integer.valueOf(forum.getId()), forum);  //写入板块ID映射
		this.forums.add(forum); //写入板块集合
	}

 却意外发现,在category创建的时候已经读入了所有的forum,那为什么在forumRepository的start中又再次读一遍呢?有些奇怪,水平有限,不太明白。

	public Category(Category category) {
		this.name = category.getName();
		this.id = category.getId();
		this.order = category.getOrder();
		this.moderated = category.isModerated();
		
		for (Iterator<Forum> iter = category.getForums().iterator(); iter.hasNext(); ) {
			Forum forum = new Forum(iter.next()); 
			this.forumsIdMap.put(Integer.valueOf(forum.getId()), forum);//写入板块ID映射
			this.forums.add(forum); //写入板块集合
		} //读入所有的板块,写入板块集合和板块ID映射
	}

 category.getForums()是读取分类下的当前用户有权处理的所有板块,但让我有些困惑的是,其来源是this.forums。而调用这个过程的Category又是将处理后的结果写入this.forums。难道说,是做一个过滤?将用户无权处理的板块删除出this.forums?

	public Collection<Forum> getForums()
	{
		if (this.forums.size() == 0) { //如果没有,直接返回空
			return this.forums;
		}
        //否则,返回有权处理的板块
		return this.getForums(SessionFacade.getUserSession().getUserId());
	}
 
	public Collection<Forum> getForums(int userId)  //根据用户ID返回有权处理的板块
	{
		PermissionControl pc = SecurityRepository.get(userId); //板限控制
		List<Forum> forums = new ArrayList<Forum>();

		for (Iterator<Forum> iter = this.forums.iterator(); iter.hasNext(); ) {
			Forum forum = iter.next();
			if (pc.canAccess(SecurityConstants.PERM_FORUM, Integer.toString(forum.getId()))) {
				forums.add(forum); //如果有权控制板块,则添加到返回列表
			}
		}
		
		return forums;
	}
 
分享到:
评论

相关推荐

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

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

    chx99个人主页源码_chx99.zip

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

    CHX TNF JNK之间的关系

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

    chx2095中文 英文资料

    - 对于特定的输入频率,输出端口会显示不同倍数的输入频率电平,例如1xFin、2xFin、3xFin、4xFin和5xFin。 - 输入端口和输出端口的电压驻波比(VSWR)均为2.5:1,表明电路具有良好的阻抗匹配。 ### 技术细节 - ...

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

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

    CHX

    此外,对于初学者来说,阅读和理解CHX的源代码也是一个很好的学习C语言和理解十六进制编辑器工作原理的机会。 总的来说,CHX 是一款实用的终端工具,它的轻量级设计和高度可定制性使其成为开发人员和系统管理员的...

    [CMS程序]chx99个人主页源码_chx99(ASP.NET源码).rar

    总之,通过对【CMS程序]chx99个人主页源码_chx99(ASP.NET源码)的深入研究,我们可以学习到ASP.NET Web Forms的开发技术,数据绑定,用户认证,配置管理,以及前端交互等多个方面,这将对提升我们的ASP.NET开发技能...

    HA-SoftEther-CHX虚拟专网

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

    CHX612.zip

    这篇文章将详细讲解与"CHX612.zip"压缩包相关的知识点,主要涉及HX612触摸IC、STC15W408AS微控制器以及相关编程与接口技术。 首先,我们关注的是HX612,这是一款触摸传感器集成电路。不同于常见的I2C接口,HX612...

    chx99个人主页源码

    2. **响应式设计**:现代个人主页源码通常会包含响应式布局,以适应不同设备的屏幕尺寸,如手机、平板电脑和桌面电脑。 3. **模板系统**:部分源码可能使用模板引擎(如EJS、Pug或Handlebars),使得内容替换和布局...

    [CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载

    [CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]...

    Chx.rar_最优化_最优化方法_梯度优化_梯度法

    在给定的“Chx.rar”压缩包中,包含的主题是“最优化方法”和“梯度优化”,特别是“梯度法”。这表明压缩包里的资源可能涉及如何使用梯度信息来优化复杂问题的解决方案。 首先,我们要理解“最优化”是什么。最...

    ASP.NET源码——[CMS程序]chx99个人主页源码.zip

    总的来说,"ASP.NET源码——[CMS程序]chx99个人主页源码.zip"是一个宝贵的学习资源,不仅展示了ASP.NET在实际项目中的应用,也提供了实践和理解Web开发最佳实践的机会。无论是初学者还是经验丰富的开发者,都能从中...

    CHX-3大手臂大法兰.SLDDRW

    CHX-3大手臂大法兰.SLDDRW

    \HA-SoftEther-CHX虚拟网卡及教程

    本软件是一个模似网卡和集线器的工具,可以模似集线器功能,实现VPN的功能。使得系统把此软件识别成一块网卡,有了这个东西,只要可以访问外网,都可以连接到虚拟HUB上与其他电脑组成局域网,在此虚拟的局域...

    程序源码 chx99个人主页源码_chx99(ASP.NET源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

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

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

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

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

    ASP.NET-[CMS程序]chx99个人主页源码.zip

    2. **后端逻辑**:这部分主要是处理用户请求、执行业务逻辑和数据库操作的代码,通常由ASP.NET Web Forms或MVC架构实现。开发者可能使用C#或VB.NET编写这些代码,它们存在于`.cs`或`.vb`文件中。 3. **前端界面**:...

Global site tag (gtag.js) - Google Analytics