国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

可簡化生成JScript過程的自定義標簽庫

2019-11-18 13:17:24
字體:
來源:轉載
供稿:網友

  菜單是軟件應用的重要組件。實現靜態菜單相對來說比較簡單――僅需一次性的自定義分類和功能即可。對于一個動態菜單,由于每個用戶的資料和參數都不盡相同,實現起來既具有挑戰性,又顯得十分棘手。
  java程序語言內置了創建基本菜單的架構,而jsp缺少此項支持。Web應用必須使用Java applets或javascript來實現菜單結構。許多web應用開發人員偏愛于Javascript(它比applets更易開發)。本文將講述一個可簡化生成動態javascript過程的自定義標簽庫,包括標簽庫的設計和實現等內容。
  
  設計方案
  我們的設計目標是一個可以實現等級分類的對象模型,包括產生javascript的方法。
  在實現等級分類的菜單系統中,每個菜單都包括一個或多個菜單項或子菜單,子菜單又可以展開包括菜單項和子菜單。菜單提供了實現程序具體功能的入口。不管菜單是何種類型,菜單對象都應該可以產生適當的javascript。
  在基于復合物的設計模式上,simple menu在葉層次上實現了菜單,composite menu在菜單架構上實現了子菜單組和simple menu。換句話說:Composite可以包含SimpleMenu對象和其他CompositeMenu對象的列表。Menu抽象類聲明了menu,定義了render方法供子類提供各自的實現。
  
  下圖描述了此復合物的設計模式:
  
可簡化生成JScript過程的自定義標簽庫

  
菜單類的UML圖

  SimpleMenu實現了帶有指向各自應用功能URL菜單項。CompositeMenu通過循環訪問子菜單列表重寫了render方法,分別調用各個的render方法。記住,列表可能既有菜單項,又有子菜單,所以菜單可能有多層。
  下面的列表顯示了CompositeMenu和SimpleMenu的render方法。這兩個方法都產生了javascript,調用dynamicmenu.js存在的方法。這個文件的方法負責在瀏覽器種生成菜單。這些功能的設計與實現不在本文探討的范圍之內。
  
  SimpleMenu的render方法
  StringBuffer sb = new StringBuffer();
  sb.append("addmenuitem(");
  sb.append("/"" + getLevelCoord() + "/",");
  sb.append("/"" + getMenuName() + "/",");
  sb.append("/"" + getUrl() + "/",");
  sb.append("/"black/",/"FAEBD7/",/"white/", /"3366CC/",/"white/",
  /"3366CC/",/"font-family:Tahoma, Verdana, Arial;
  font-size:12px;font-weight:normal,text-decoration:none;padding: 4px/");");
  sb.append("/n");
  return sb.toString();
  
  CompositeMenu的render方法
  
  StringBuffer sb = new StringBuffer();
  sb.append("addmenuitem(");
  sb.append("/"" + getLevelCoord() + "/",");
  sb.append("/"" + getMenuName() + "/",");
  if (null == getUrl())
  sb.append("null" + ",");
  else
  sb.append("/"" + getUrl() + "/",");
  sb.append("/"black/",/"FAEBD7/",/"white/",/"3366CC/",/"white/",/"3366CC/",
    /"font-family:Tahoma, Verdana, Arial; font-size:12px;
    font-weight:normal,text-decoration:none;padding: 4px/");");
  
  sb.append("/n");
  Iterator it = list.iterator();
  int i=1;
  while(it.hasNext())
  {
  Menu menu = (Menu)it.next();
  menu.setLevelCoord(getLevelCoord() + "," + i);
  sb.append(menu.render());
  i++;
  }
  return sb.toString();
  
  菜單數據源
  菜單創建者(menu builder)負責根據數據源創建菜單。菜單數據根據種類分級。它可以來自任何可支持表單等級數據的源。我們實現了創建者,分別使用兩種通用的數據源:xml數據庫。當然,你也可以很方便的根據此設計方法開發出其他的創建者。
  
  XMLMenuBuilder
  既然菜單結構和XML結構都由等級屬性,XML可方便的表達菜單數據。XMLMenuBuilder接受包含菜單定義的XML文件,解析XML文檔來創建動態菜單。XML文檔的<menu>元素可以看作是菜單項或子菜單,子菜單又可以展開包括菜單項或子菜單。
  
  JDBCMenuBuilder
  既然數據庫表格可以表示相關聯的數據,表也可以用來表達等級數據。HIERARCHYMENU表表示等級化的菜單數據。JDBCMenuBuilder接受從數據庫的信息,按照次序從HIERARCHYMENU表中選擇菜單數據。
  
  菜單標簽庫
  菜單標簽庫治理創建javascript菜單的復雜過程。菜單標簽自身是一個繼續TagSupport類的抽象類,并重寫了doStartTag和doEndTag方法。getMenu方法是一個抽象方法應該被子類重寫用來提供javascript,它可以增加在doStartTag方法中創建的菜單結構的菜單項。菜單標簽的子類重寫了getMenu方法,使用了可從數據源提取菜單數據的菜單創建者。
  其中動態菜單標簽庫包含兩個標簽:JDBCMenuTag和XMLMenuTag。JDBCMenuTag使用JDBCBuilder根據數據庫中的數據創建菜單結構,而XMLMenuTag使用XMLBuilder根據XML數據源創建菜單結構。文檔提供了具體的使用標簽庫的說明。
  這個版本的標簽庫也包含一些局限性。它沒有使用戶角色和菜單發生相關聯,每個應用對此都不盡相同。標簽庫也沒有提供對菜單項特定顏色和字體的支持。
  菜單標簽庫應用例子
  Menu-example.war文件包含了使用標簽庫的JSP頁面。在Tomcat下以一下步驟部署應用:
  (1)拷貝menu-example.war到tomcat安裝文件夾/webapps.
  (2)重啟Tomcat來展開應用。
  (3)根據環境調整xmlmenu.jsp和jdbcmenu.jsp
  (4)創建一個新的數據庫表結構,導入menu.sql文件中的數據。
  (5)訪問根據XML創建的菜單,訪問localhost:8080/menu-example/xmlmenu.jsp.
  (6)訪問根據JDBC創建大額菜單,訪問localhost:8080/menu-example/jdbcmenu.jsp.
  
  結論
  動態菜單標簽庫治理由javascript創建菜單的復雜過程,并答應web應用通過數據庫或xml源創建動態等級菜單。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥德县| 赫章县| 巴里| 民权县| 海宁市| 陈巴尔虎旗| 故城县| 双鸭山市| 昔阳县| 堆龙德庆县| 岳阳市| 海晏县| 平谷区| 车险| 鄯善县| 雷波县| 甘德县| 云龙县| 宜黄县| 长治县| 青神县| 塘沽区| 江源县| 祁阳县| 岑巩县| 油尖旺区| 大冶市| 双峰县| 十堰市| 常州市| 云霄县| 邵东县| 遂溪县| 临汾市| 岳普湖县| 什邡市| 青河县| 东辽县| 牙克石市| 泸州市| 宜黄县|