/** * @author xichao.dong * @email 406592176@qq.com * @date 2014-8-15 上午8:50:38 * @company (开发公司) 珠海市冰川软件有限公司 * @copyright (版权) 本文件归属珠海市冰川软件有限公司所有 * @version V1.0 * @modify (修改) : 2014-8-15 上午8:50:38 xichao.dong * @Review (审核人) :xichao.dong */ package com.glacier.frame.web.tag; import java.sql.ResultSet; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import com.glacier.basic.util.DBHelper; import com.glacier.frame.entity.common.util.CommonStatus; import com.glacier.frame.entity.system.Action; import com.glacier.frame.entity.system.util.ActionType; /** * @ClassName: EasyUIToolbarTag * @Description: TODO(通过Shiro控制EasyUI显示内容,自定义标签根据用户权限获取页面数据) * @author xichao.dong * @email 406592176@qq.com * @date 2014-8-28 下午5:36:05 */ public class EasyUIToolbarTag extends TagSupport { private static final long serialVersionUID = 435348957983475982L; /** * 生成的toolbar div 的唯一Id */ private String toolbarId; /** * 用户调用的页面menuEnName */ private String menuEnName; /** * 操作所在面板英文名称 */ private String panelEnName; public String getToolbarId() { return toolbarId; } public void setToolbarId(String toolbarId) { this.toolbarId = toolbarId; } public String getMenuEnName() { return menuEnName; } public void setMenuEnName(String menuEnName) { this.menuEnName = menuEnName; } public String getPanelEnName() { return panelEnName; } public void setPanelEnName(String panelEnName) { this.panelEnName = panelEnName; } @Override public int doStartTag() throws JspException { try { Subject subject = SecurityUtils.getSubject();// 获取通过认证主体 StringBuilder sqlStr = new StringBuilder(); sqlStr.append("select "); sqlStr.append("temp_action.action_id as temp_action_action_id, temp_action.menu_id as temp_action_menu_id, "); sqlStr.append("temp_action.panel_id as temp_action_panel_id, "); sqlStr.append("temp_action.action_cn_name as temp_action_action_cn_name, "); sqlStr.append("temp_action.action_en_name as temp_action_action_en_name, temp_action.icon_cls as temp_action_icon_cls, "); sqlStr.append("temp_action.type as temp_action_type, temp_action.disabled as temp_action_disabled, "); sqlStr.append("temp_action.method as temp_action_method, temp_action.order_num as temp_action_order_num, "); sqlStr.append("temp_action.remark as temp_action_remark "); sqlStr.append(",temp_menu.menu_en_name as temp_action_menuEnName "); sqlStr.append(",temp_panel.panel_cn_name as temp_action_panel_cn_name "); sqlStr.append(",temp_panel.panel_en_name as temp_action_panel_en_name "); sqlStr.append("from t_action temp_action INNER JOIN t_menu temp_menu ON temp_action.menu_id = temp_menu.menu_id INNER JOIN t_panel temp_panel ON temp_action.panel_id = temp_panel.panel_id WHERE temp_menu.menu_en_name = ? AND temp_panel.panel_en_name = ? ORDER BY temp_action.order_num ASC"); Object[] obj = new Object[]{menuEnName,panelEnName}; ResultSet rs = DBHelper.executeQuery(sqlStr.toString(), obj);// 为了提高性能,同时解除Web和Bean的耦合,这里使用了jdbc方式进行数据获取 StringBuilder returnStr = new StringBuilder("<div id=\"" + this.toolbarId + "\" class=\"easyui-toolbar\">"); while (rs.next()) {// 遍历返回数据,进行字符串构造 Action actionTemp = new Action(); actionTemp.setActionId(rs.getString("temp_action_action_id")); actionTemp.setMenuId(rs.getString("temp_action_menu_id")); actionTemp.setActionCnName(rs.getString("temp_action_action_cn_name")); actionTemp.setActionEnName(rs.getString("temp_action_action_en_name")); actionTemp.setPanelCnName(rs.getString("temp_action_panel_cn_name")); actionTemp.setPanelEnName(rs.getString("temp_action_panel_en_name")); actionTemp.setIconCls(rs.getString("temp_action_icon_cls")); actionTemp.setType(ActionType.valueOf(rs.getString("temp_action_type"))); actionTemp.setDisabled(CommonStatus.valueOf(rs.getString("temp_action_disabled"))); actionTemp.setMethod(rs.getString("temp_action_method")); actionTemp.setOrderNum(rs.getInt("temp_action_order_num")); actionTemp.setRemark(rs.getString("temp_action_remark")); actionTemp.setMenuEnName(rs.getString("temp_action_menuEnName")); String permissionStr = actionTemp.getMenuEnName() + ":" + actionTemp.getPanelEnName()+"_"+actionTemp.getActionEnName(); if (subject.isPermitted(permissionStr)) {// 权限验证通过 returnStr.append("<a id=\"" + actionTemp.getMenuEnName() + "_btn_" + actionTemp.getPanelEnName() + "_" + actionTemp.getActionEnName() + "\" class=\"easyui-linkbutton\" data-options=\"plain:true"); returnStr.append(",disabled:" + actionTemp.getDisabled().getValue()); if (!"".equals(actionTemp.getIconCls())) { returnStr.append(",iconCls:'" + actionTemp.getIconCls() + "'\""); } if (ActionType.Button.equals(actionTemp.getType()) && !"".equals(actionTemp.getMethod())) { returnStr.append(" onclick=\"" + actionTemp.getMethod() + "\" href=\"javascript:void(0);\""); } else if (ActionType.Link.equals(actionTemp.getType()) && !"".equals(actionTemp.getMethod())) { returnStr.append(" href=\"" + actionTemp.getMethod() + "\""); } returnStr.append(" >"+actionTemp.getActionCnName()+" </a><div class=\"dialog-tool-separator\"></div>"); } } returnStr.append(" </div>"); this.pageContext.getOut().println(returnStr.toString().toCharArray());// 输出到页面 DBHelper.free(rs);// 关闭链接 } catch (Exception e) { e.printStackTrace(); } return SKIP_BODY; } }