角色查询功能

1,查询出角色数据
2,查询出角色对应的模块数据
3,通过关联查询,返回的数据是冗余的,会多于角色本身的数据。
--就按照关联来查询,然后使用java代码将其进行合并
--分步骤查询,先查询出角色,再遍历角色,根据每一个角色查询它对应的权限

Util:

/**
 * 解析privileges.xml工具类
 */
public class PrivilegeReader {

	// 用于存储privileges.xml的权限操作信息
	private static List<Privilege> privileges = new ArrayList<Privilege>();

	static {
		InputStream xml = PrivilegeReader.class.getClassLoader()
				.getResourceAsStream("privileges.xml");
		privileges = toModuleList(xml);
	}

	/**
	 * 返回XML中所有权限数据
	 * 
	 * @return
	 */
	public static List<Privilege> getPrivileges() {
		return privileges;
	}

	/**
	 * 根据权限ID查询模块名称
	 * 
	 * @param id
	 * @return
	 */
	public static String getPrivilegeNameById(Integer id) {
		List<Privilege> privileges = getPrivileges();
		for (Privilege privilege : privileges) {
			if (privilege.getId().equals(id)) {
				return privilege.getName();
			}
		}
		return null;
	}

	/**
	 * 解析privileges.xml文件
	 * 
	 * @param xml
	 * @return
	 */
	@SuppressWarnings("unchecked")
	protected static List<Privilege> toModuleList(InputStream xml) {
		List<Privilege> modules = new ArrayList<Privilege>();
		try {
			SAXReader reader = new SAXReader();
			Document doc = reader.read(xml);
			Element root = doc.getRootElement();
			List<Element> moduleElements = root.elements("privilege");
			for (Element moduleElement : moduleElements) {
				Privilege module = new Privilege();
				module.setId(Integer.valueOf(moduleElement.attributeValue("id")));
				module.setName(moduleElement.elementText("name"));
				Element urlElement = moduleElement.element("urls");
				List<Element> urlElements = urlElement.elements();
				List<String> urls = new ArrayList<String>();
				for (Element element : urlElements) {
					urls.add(element.getText());
				}
				module.setUrls(urls);
				modules.add(module);
			}

			return modules;
		} catch (DocumentException e) {
			e.printStackTrace();
			throw new RuntimeException("解析权限文件失败!", e);
		}
	}


}

DAO:

public List<RoleVO> findByPage(Integer page, Integer pageSize)
		throws DAOException {
	String sql = "select * from ("+
					"select r.*, rownum n from role_info r )"+
					" where n>? and n<?";
	Connection con = DBUtil.getConnection();
	List<RoleVO> list = new ArrayList<RoleVO>();
	try {
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setObject(1, pageSize*(page-1));
		ps.setObject(2, pageSize*page+1);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			RoleVO vo = new RoleVO();
			vo.setId(rs.getInt("id"));
			vo.setName(rs.getString("name"));
			String sql2 = "select privilege_id " +
							"from role_privilege "+
							" where role_id = ?";
			PreparedStatement ps2 = con.prepareStatement(sql2);
			ps2.setObject(1, vo.getId());
			ResultSet rs2 = ps2.executeQuery();
			String name = "";//将权限名拼成字符串,拼名称时中间用逗号隔开
			while(rs2.next()){
				int privilegeId = rs2.getInt(1);
				//根据权限id获取权限名称
				String pname = PrivilegeReader.getPrivilegeNameById(privilegeId);
				name += "," +pname;
			}
			//第一个逗号多余将其去掉
			if(name.length()>0){
				name = name.replaceFirst(",", "");
			}
			vo.setPrivilegesNames(name);
			list.add(vo);
		}
	} catch (SQLException e) {
		e.printStackTrace();
		throw new DAOException("查询角色失败", e);
	} finally{
		DBUtil.close();
	}
	
	return list;
}

public Integer findTotalPage(Integer pageSize) throws DAOException {
	String sql = "select count(*) from role_info";
	Connection con = DBUtil.getConnection();
	
	try {
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		if(rs.next()){
			int rows = rs.getInt(1);
			if(rows%pageSize==0){
				return rows/pageSize;
			}else{
				return rows/pageSize + 1;
			}
		}
	} catch (SQLException e) {
		e.printStackTrace();
		throw new DAOException("查询角色总页数失败", e);
	} finally{
		DBUtil.close();
	}
	
	return 0;
}

Action:

public class FindRoleAction {
	
	public String execute(){
		IRoleDAO dao = DAOFactory.getRoleDAO();
		try {
			roleVOs = dao.findByPage(page, pageSize);
			totalPage = dao.findTotalPage(pageSize);
		} catch (DAOException e) {
			e.printStackTrace();
			return "error";
		}
		
		return "success";
	}
	
	//input
	private Integer page=1;
	private Integer pageSize;
	//output
	private List<RoleVO> roleVOs;
	private Integer totalPage;
	public Integer getPage() {
		return page;
	}
	public void setPage(Integer page) {
		this.page = page;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	public List<RoleVO> getRoleVOs() {
		return roleVOs;
	}
	public void setRoleVOs(List<RoleVO> roleVOs) {
		this.roleVOs = roleVOs;
	}
	public Integer getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}
	
	
}

struts.xml

<!-- 角色管理模块配置 -->
<package name="role" extends="netctoss" namespace="/role">
	<action name="findRole" class="netctoss.action.role.FindRoleAction">
		<param name="pageSize">3</param>
		<result name="success">
			/WEB-INF/role/findRole.jsp
		</result>
	</action>
</package>

Jsp:

<div id="data">                      
    <table id="datalist">
	<tr>                            
	    <th>角色 ID</th>
	    <th>角色名称</th>
	    <th class="width600">拥有的权限</th>
	    <th class="td_modi"></th>
	</tr>
	<s:iterator value="roleVOs">                    
		<tr>
		    <td><s:property value="id"/></td>
		    <td><s:property value="name"/></td>
		    <td><s:property value="privilegesNames"/></td>
		    <td>
			<input type="button" value="修改" class="btn_modify" οnclick="location.href='role_modi.html';"/>
			<input type="button" value="删除" class="btn_delete" οnclick="deleteRole();" />
		    </td>
		</tr>
	</s:iterator>  
	
    </table>
</div> 
<!--分页-->
<div id="pages">
	<s:hidden name="page" id="page"/>
	<a href="javascript:toPage(1);">首页</a>
	<s:if test="page==1">
		<a href="#">上一页</a>
	</s:if>
	<s:else>
		<a href="javascript:toPage(<s:property value="page-1"/>)">上一页</a>
	</s:else>
	
	<s:iterator begin="1" end="totalPage" var="p">
		<s:if test="page==#p">
			<a href="javascript:toPage(<s:property value="#p"/>)" class="current_page">
				<s:property value="#p"/>
			</a>
		</s:if>
		<s:else>
			<a href="javascript:toPage(<s:property value="#p"/>)">
				<s:property value="#p"/>
			</a>
		</s:else>
	</s:iterator>
    
    <s:if test="page==totalPage">
	<a href="#">下一页</a>
    </s:if>
    <s:else>
	<a href="javascript:toPage(<s:property value="page+1"/>)">下一页</a>
    </s:else>
    <a href="javascript:toPage(<s:property value="totalPage"/>);">末页</a>
</div>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值