`

Java通过读取XML配置用户功能

阅读更多
1、定制XML功能menu.xml
<root>
	<menus id="1" display="产品导航" priority="1" icon="menu-gps">
		<menu id="11" pid="1" display="产品之家" url="/service/products" priority="1" icon="menu-location"></menu>
		<menu id="12" pid="1" display="企业市场" url="/service/market" priority="2" icon="menu-track"></menu>
		<menu id="11" pid="1" display="在线服务" url="/service/online" priority="1" icon="menu-location"></menu>
		<menu id="12" pid="1" display="联系购买" url="/service/contactbuy" priority="2" icon="menu-track"></menu>
	</menus>
	<!--  其他服务  -->
</root>

2、编写菜单对象
public class Menu 
{
	private int id;
	private String text;
	private int pid;
	private String icon;
	private String url;
	private int priority;
	private List<Menu> children;
	//getter,setter...........
}

3、编写解析文件的工具
package com.cmboonya.configuration.service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.boonya.code4j.orm.hibernate.BaseDao;
import com.boonya.code4j.orm.hibernate.BaseService;
import com.cmboonya.configuration.dao.AccountMemberGroupDao;
import com.cmboonya.configuration.dao.AccountRoleDao;
import com.cmboonya.configuration.entity.AccountMember;
import com.cmboonya.configuration.entity.AccountMemberGroup;
import com.cmboonya.configuration.entity.Menu;

@Service
@Transactional
public class MenuService extends BaseService<Menu>
{

	@Resource
	private IAccountMemberService accountMemberService;

	@Resource
	private IAccountRoleFunctionService accountRoleFunctionService;

	public Document getDocument(HttpServletRequest req)
	{
		SAXReader reader = new SAXReader();
		Document document = null;
		try
		{
			document=reader.read((MenuService.class.getClassLoader().getResourceAsStream("menu.xml")));
		} catch (DocumentException e)
		{
			e.printStackTrace();
		}
		return document;
	}

	public List<Menu> getMenuListByUserId(int userId, HttpServletRequest req)
	{
		AccountMember user = accountMemberService.getUserById(userId);
		List<Menu> menuList = new ArrayList<Menu>();
		if (user.getType() == 0)
		{
			menuList = getAll(req);
		} else
		{
			menuList=getAll(req, userId);
		}

		return menuList;
	}

        @SuppressWarnings("rawtypes")
	public List<Menu> getAll(HttpServletRequest req)
	{
		List<Menu> menus = new ArrayList<Menu>();
		Document document = getDocument(req);
		Element rootElm = document.getRootElement();
		List nodes = rootElm.elements("menus");
		for (Iterator it = nodes.iterator(); it.hasNext();)
		{
			Element elm = (Element) it.next();
			Menu menu = new Menu();

			menu.setId(Integer.parseInt(elm.attributeValue("id")));
			menu.setText(elm.attributeValue("display"));
			menu.setPid(elm.attributeValue("pid") == null ? 0 : Integer.parseInt(elm.attributeValue("pid")));
			menu.setPriority(Integer.parseInt(elm.attributeValue("priority")));
			menu.setIcon(elm.attributeValue("icon"));
			menu.setUrl(elm.attributeValue("url"));
			Logger.getLogger(MenuService.class).info("Menu url="+menu.getUrl());
			menus.add(menu);
			List children = elm.elements("menu");
			if (children.size() > 0)
			{
				List<Menu> childrenMenus = new ArrayList<Menu>();
				for (Iterator ch = children.iterator(); ch.hasNext();)
				{
					Element element = (Element) ch.next();
					Menu childrenMenu = new Menu();
					childrenMenu.setId(Integer.parseInt(element.attributeValue("id")));
					childrenMenu.setText(element.attributeValue("display"));
					childrenMenu.setPid(element.attributeValue("pid") == null ? 0 : Integer.parseInt(element.attributeValue("pid")));
					childrenMenu.setPriority(Integer.parseInt(element.attributeValue("priority")));
					childrenMenu.setIcon(element.attributeValue("icon"));
					childrenMenu.setUrl(element.attributeValue("url"));
					Logger.getLogger(MenuService.class).info("childrenMenu url="+childrenMenu.getUrl());
					childrenMenus.add(childrenMenu);
				}
				menu.setChildren(childrenMenus);
			}
		}

		return menus;
	}

	// 根据登录账号获取菜单
	@SuppressWarnings("rawtypes")
	public List<Menu> getAll(HttpServletRequest req, int userId)
	{
		AccountMember user = accountMemberService.getUserById(userId);
		List<AccountRoleFunction> funList = accountRoleFunctionService.getBindByRoleId(user.getRoleId());
		List<Integer> funIds = new ArrayList<Integer>();
		for (AccountRoleFunction item : funList)
		{
			int id=item.getFunctionId();
			int temp=id/10;
			if (!funIds.contains(temp)){
				funIds.add(temp);
			}
			funIds.add(id);
		}

		List<Menu> menus = new ArrayList<Menu>();
		Document document = getDocument(req);
		Element rootElm = document.getRootElement();
		List nodes = rootElm.elements("menus");
		for (Iterator it = nodes.iterator(); it.hasNext();)
		{
			Element elm = (Element) it.next();
			int menuId = Integer.parseInt(elm.attributeValue("id"));
			if (funIds.contains(menuId))
			{
				Menu menu = new Menu();
				menu.setId(Integer.parseInt(elm.attributeValue("id")));
				menu.setText(elm.attributeValue("display"));
				menu.setPid(elm.attributeValue("pid") == null ? 0 : Integer.parseInt(elm.attributeValue("pid")));
				menu.setPriority(Integer.parseInt(elm.attributeValue("priority")));
				menu.setIcon(elm.attributeValue("icon"));
				menu.setUrl(elm.attributeValue("url"));
				menus.add(menu);
				List children = elm.elements("menu");
				if (children.size() > 0)
				{
					List<Menu> childrenMenus = new ArrayList<Menu>();
					for (Iterator ch = children.iterator(); ch.hasNext();)
					{
						Element element = (Element) ch.next();
						int childrenId = Integer.parseInt(element.attributeValue("id"));
						if (funIds.contains(childrenId))
						{
							Menu childrenMenu = new Menu();
							childrenMenu.setId(Integer.parseInt(element.attributeValue("id")));
							childrenMenu.setText(element.attributeValue("display"));
							childrenMenu.setPid(element.attributeValue("pid") == null ? 0 : Integer.parseInt(element.attributeValue("pid")));
							childrenMenu.setPriority(Integer.parseInt(element.attributeValue("priority")));
							childrenMenu.setIcon(element.attributeValue("icon"));
							childrenMenu.setUrl(element.attributeValue("url"));
							childrenMenus.add(childrenMenu);
						}
					}
					menu.setChildren(childrenMenus);
				}
			}
		}

		return menus;
	}
}

此方式是一个做UI设计同事写的,拿来给大家分享一下。
分享到:
评论

相关推荐

    JAVA高手解析XML配置文件的读取操作.pdf

    JAVA 高手解析 XML 配置文件的读取操作 本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML ...

    使用Java读取XML配置文件

    使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 XML 在电子商务中的数据交换的作用。但是在平时系统开发中,我们不一定都用到数据交换,是否无法使用 XML?当然不是...

    java读取 配置 xml文件

    总的来说,Java通过DOM解析XML文件,可以方便地读取和操作XML配置。结合这个基础,我们可以构建自己的轻量级框架来管理和实例化bean,模仿Spring的部分功能。然而,要完全复现Spring的强大功能,还需要深入理解和...

    Java中XML配置文件的读取(sax).doc

    Java中XML配置文件的读取(SAX) XML配置文件是Java开发中常用的配置文件格式,特别是在J2EE项目中。XML文件可以存储配置信息,并且易于维护和修改。然而,在Java中读取XML配置文件成了一个需要解决的问题。本文将...

    JAVA项目数据库连接XML配置文件.docx

    JAVA项目数据库连接XML配置文件 在 Java 项目中,数据库连接的配置是一个非常重要的步骤,为了方便用户配置数据库,使用 XML 配置文件可以灵活地修改数据连接。本文将详细介绍如何使用 XML 配置文件来连接数据库。 ...

    java读取配置文件xml ,properties,txt

    1. **XML配置文件**: XML是一种结构化数据存储格式,常用于复杂的应用程序配置。在Java中,我们可以使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析器来读取...

    java读取xml文件

    Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...

    java读取本地xml文件信息

    总结起来,Java读取本地XML文件涉及的主要步骤包括创建`DocumentBuilderFactory`,构建`DocumentBuilder`,解析XML文件为`Document`对象,然后通过`Document`对象访问和操作XML结构。对于复杂需求,XPath可以提供更...

    java 解析xml 多级

    而SAX解析器采用事件驱动的方式,逐行读取XML文件,适合处理大型XML文件以避免内存消耗。 对于多级XML,DOM解析更便于操作。以下是一个使用Java DOM解析XML的步骤: 1. 引入必要的库: 需要引入`javax.xml....

    java读取XML(JDOM)

    Java读取XML文件是开发过程中常见的任务,JDOM是一个用于处理XML文档的Java库,它提供了方便、高效的方式来创建和操作XML数据。本篇将详细讲解如何使用JDOM来读取XML文件,以及相关的源码解析。 首先,我们需要了解...

    java利用jdom读取xml文件

    通过以上步骤,我们便能使用JDOM库在Java中高效地读取和操作XML文件。JDOM的优势在于它提供了直观且符合Java习惯的API,使得XML处理变得更加简单。然而,对于大型XML文件,考虑到性能因素,可能需要考虑使用其他解析...

    java递归读取xml文件

    在Java编程中,处理XML文件是一项常见的任务,尤其是在数据交换、配置存储或文件解析等领域。当我们需要读取的XML文件结构复杂,包含嵌套的元素时,递归方法就显得尤为适用。本篇文章将深入探讨如何使用Java递归地...

    java写XML文件和读取XML文件

    二、Java读取XML文件 1. 使用DOM解析: 读取XML文件时,首先会将整个XML文档加载到内存中的DOM树,然后通过API遍历和访问各个节点。 示例代码: ```java import javax.xml.parsers.DocumentBuilder; import javax....

    JAVA一键操作 XML简单API

    8. **兼容性和扩展性**:考虑到Java的广泛使用,这个XML工具类可能已经考虑到了与各种Java版本的兼容性,并且可能提供了一些扩展点,允许用户根据需要自定义行为。 在项目中使用这个API时,你需要先将其`lib`目录下...

    Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)

    本篇文章将深入探讨如何使用DOM(Document Object Model)和SAX(Simple API for XML)两种不同的技术来解析XML配置文件,从而建立数据库连接。 一、DOM技术连接 DOM是一种树形模型,它将整个XML文档加载到内存中,...

    JAVA高手解析XML配置文件的读取操作

    SAXException { ...通过Java的SAX解析器,我们可以方便地读取和处理这些配置,使得程序能够根据环境动态调整行为。了解和掌握XML解析技术,对于Java开发者来说,是提升项目可维护性和扩展性的重要技能。

    java 读取xml文件生成树形图

    在Java编程中,读取XML文件并将其转换为树形结构是一种常见的操作,尤其是在处理配置文件、数据交换或解析XML文档时。以下是一篇详细解释如何实现这一过程的文章。 首先,我们需要了解XML(eXtensible Markup ...

    java 操作xml文件(包含xml文件和对应jar包)

    Java操作XML文件是Java开发中常见的一项任务,特别是在处理配置、数据交换或存储结构化信息时。XML(Extensible Markup Language)是一种标记语言,它的结构清晰、可读性强,易于机器解析和生成。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics