示例#1
0
  /** 加载菜单 */
  private static synchronized void loadMenus() {

    // 初始化
    if (contextPath == null) {
      log.error("请先设置应用程序上下文!");
      return;
    }
    htMenus = new Hashtable();
    htIndexById = new Hashtable();
    StringBuffer sbQuerySql =
        new StringBuffer("SELECT * FROM MENUALL WHERE (APPSYS = '99' OR APPSYS = '");
    sbQuerySql.append(PropertyManager.getProperty("appsys")).append("')");
    String strTempSqlwhere = PropertyManager.getProperty("menu.add.sqlwhere");
    if (sqlWhere == null || !sqlWhere.trim().equals("")) {
      if (strTempSqlwhere != null && !strTempSqlwhere.trim().equals("")) sqlWhere = strTempSqlwhere;
    } else {
      if (strTempSqlwhere != null && !strTempSqlwhere.trim().equals(""))
        sqlWhere = "(" + sqlWhere + ") AND (" + strTempSqlwhere + ")";
    }
    if (sqlWhere != null && sqlWhere.length() > 3) {
      log.debug("添加的Where条件:" + sqlWhere);
      sbQuerySql.append(" AND (").append(sqlWhere).append(") ");
    }
    sbQuerySql.append(" ORDER BY MENUID");
    DataBean db = new DataBean();
    DynaSqlBean dsb = new DynaSqlBean();
    dsb.setSql(sbQuerySql.toString());
    try {
      db.setCrs(dsb.executeQuery());
    } catch (SQLException e) {
      log.error(e.getMessage(), e);
      return;
    }
    log.debug("从数据库中取得菜单数:" + String.valueOf(db.getRowCount()));

    String strMenuNameEn;
    String strMenuNameCn;
    String strMenuId;
    String strUrl;
    String strPurview;

    // 所有菜单不用经过权限的检验,统一放到哈希表中,其中判断节点和
    // 菜单项的条件也改为仅与前一项的前两位字符相比较,如果不一样则
    // 为新的节点
    for (int i = 0; i < db.getRowCount(); i++) {
      strMenuId = db.getElementValue(i, "MENUID").trim();
      log.debug(strMenuId);
      strPurview = db.getElementValue(i, "MPURVIEW").trim();
      strMenuNameCn = db.getElementValue(i, "MNAMEC").trim();
      if (strMenuNameCn.indexOf("(&") > 0)
        strMenuNameCn = strMenuNameCn.substring(0, strMenuNameCn.indexOf("(&"));
      MenuNode mn = new MenuNode(strMenuId, strMenuNameCn);

      strMenuNameEn = db.getElementValue(i, "MNAMEE").trim();
      strUrl = db.getElementValue(i, "MFILEE").trim();
      if (strUrl.length() > 0) {
        if (strUrl.startsWith("/")) strUrl = getContextPath() + strUrl;
        strUrl = CommonTools.encodeUrl(strUrl);
      }
      mn.setUrl(strUrl);
      mn.setEnglishName(strMenuNameEn);
      mn.setPurview(strPurview);

      htIndexById.put(strMenuId, mn.getNodeId());

      // 填充主菜单
      while (i < db.getRowCount() - 1) {
        strMenuId = db.getElementValue(i + 1, "MENUID").trim();
        if (strMenuId.startsWith(mn.getNodeId().substring(0, 2))) {
          // 子菜单
          i++;
          log.debug(strMenuId);
          strPurview = db.getElementValue(i, "MPURVIEW").trim();
          //						if (!CommonTools.isMenuShow(strPurview, purview))
          //							continue;
          strMenuNameCn = db.getElementValue(i, "MNAMEC").trim();
          if (strMenuNameCn.indexOf("(&") > 0)
            strMenuNameCn = strMenuNameCn.substring(0, strMenuNameCn.indexOf("(&"));
          strMenuNameEn = db.getElementValue(i, "MNAMEE").trim();
          strUrl = db.getElementValue(i, "MFILEE").trim();
          if (strUrl.length() > 0) {
            if (strUrl.startsWith("/")) strUrl = getContextPath() + strUrl;
            strUrl = CommonTools.encodeUrl(strUrl);
          }
          MenuItem mi = new MenuItem();
          mi.setMenuId(strMenuId);
          mi.setChineseName(strMenuNameCn);
          mi.setEnglishName(strMenuNameEn);
          mi.setUrl(strUrl);
          mi.setPurview(strPurview);
          mn.addMenuItem(mi);
          htIndexById.put(strMenuId, mn.getNodeId());
        } else {
          break;
        }
      }
      htMenus.put(mn.getNodeId(), mn);
    }

    // 释放DATABEAN资源
    db.release();
    reload = false;
    loadMenuTime = System.currentTimeMillis();
    log.info(loadMenuTime);
  }