麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

可簡(jiǎn)化生成JScript過(guò)程的自定義標(biāo)簽庫(kù)

2019-11-18 13:17:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

  
菜單類(lèi)的UML圖

  SimpleMenu實(shí)現(xiàn)了帶有指向各自應(yīng)用功能URL菜單項(xiàng)。CompositeMenu通過(guò)循環(huán)訪問(wèn)子菜單列表重寫(xiě)了render方法,分別調(diào)用各個(gè)的render方法。記住,列表可能既有菜單項(xiàng),又有子菜單,所以菜單可能有多層。
  下面的列表顯示了CompositeMenu和SimpleMenu的render方法。這兩個(gè)方法都產(chǎn)生了javascript,調(diào)用dynamicmenu.js存在的方法。這個(gè)文件的方法負(fù)責(zé)在瀏覽器種生成菜單。這些功能的設(shè)計(jì)與實(shí)現(xiàn)不在本文探討的范圍之內(nèi)。
  
  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();
  
  菜單數(shù)據(jù)源
  菜單創(chuàng)建者(menu builder)負(fù)責(zé)根據(jù)數(shù)據(jù)源創(chuàng)建菜單。菜單數(shù)據(jù)根據(jù)種類(lèi)分級(jí)。它可以來(lái)自任何可支持表單等級(jí)數(shù)據(jù)的源。我們實(shí)現(xiàn)了創(chuàng)建者,分別使用兩種通用的數(shù)據(jù)源:xml數(shù)據(jù)庫(kù)。當(dāng)然,你也可以很方便的根據(jù)此設(shè)計(jì)方法開(kāi)發(fā)出其他的創(chuàng)建者。
  
  XMLMenuBuilder
  既然菜單結(jié)構(gòu)和XML結(jié)構(gòu)都由等級(jí)屬性,XML可方便的表達(dá)菜單數(shù)據(jù)。XMLMenuBuilder接受包含菜單定義的XML文件,解析XML文檔來(lái)創(chuàng)建動(dòng)態(tài)菜單。XML文檔的<menu>元素可以看作是菜單項(xiàng)或子菜單,子菜單又可以展開(kāi)包括菜單項(xiàng)或子菜單。
  
  JDBCMenuBuilder
  既然數(shù)據(jù)庫(kù)表格可以表示相關(guān)聯(lián)的數(shù)據(jù),表也可以用來(lái)表達(dá)等級(jí)數(shù)據(jù)。HIERARCHYMENU表表示等級(jí)化的菜單數(shù)據(jù)。JDBCMenuBuilder接受從數(shù)據(jù)庫(kù)的信息,按照次序從HIERARCHYMENU表中選擇菜單數(shù)據(jù)。
  
  菜單標(biāo)簽庫(kù)
  菜單標(biāo)簽庫(kù)治理創(chuàng)建javascript菜單的復(fù)雜過(guò)程。菜單標(biāo)簽自身是一個(gè)繼續(xù)TagSupport類(lèi)的抽象類(lèi),并重寫(xiě)了doStartTag和doEndTag方法。getMenu方法是一個(gè)抽象方法應(yīng)該被子類(lèi)重寫(xiě)用來(lái)提供javascript,它可以增加在doStartTag方法中創(chuàng)建的菜單結(jié)構(gòu)的菜單項(xiàng)。菜單標(biāo)簽的子類(lèi)重寫(xiě)了getMenu方法,使用了可從數(shù)據(jù)源提取菜單數(shù)據(jù)的菜單創(chuàng)建者。
  其中動(dòng)態(tài)菜單標(biāo)簽庫(kù)包含兩個(gè)標(biāo)簽:JDBCMenuTag和XMLMenuTag。JDBCMenuTag使用JDBCBuilder根據(jù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)創(chuàng)建菜單結(jié)構(gòu),而XMLMenuTag使用XMLBuilder根據(jù)XML數(shù)據(jù)源創(chuàng)建菜單結(jié)構(gòu)。文檔提供了具體的使用標(biāo)簽庫(kù)的說(shuō)明。
  這個(gè)版本的標(biāo)簽庫(kù)也包含一些局限性。它沒(méi)有使用戶角色和菜單發(fā)生相關(guān)聯(lián),每個(gè)應(yīng)用對(duì)此都不盡相同。標(biāo)簽庫(kù)也沒(méi)有提供對(duì)菜單項(xiàng)特定顏色和字體的支持。
  菜單標(biāo)簽庫(kù)應(yīng)用例子
  Menu-example.war文件包含了使用標(biāo)簽庫(kù)的JSP頁(yè)面。在Tomcat下以一下步驟部署應(yīng)用:
  (1)拷貝menu-example.war到tomcat安裝文件夾/webapps.
  (2)重啟Tomcat來(lái)展開(kāi)應(yīng)用。
  (3)根據(jù)環(huán)境調(diào)整xmlmenu.jsp和jdbcmenu.jsp
  (4)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)表結(jié)構(gòu),導(dǎo)入menu.sql文件中的數(shù)據(jù)。
  (5)訪問(wèn)根據(jù)XML創(chuàng)建的菜單,訪問(wèn)localhost:8080/menu-example/xmlmenu.jsp.
  (6)訪問(wèn)根據(jù)JDBC創(chuàng)建大額菜單,訪問(wèn)localhost:8080/menu-example/jdbcmenu.jsp.
  
  結(jié)論
  動(dòng)態(tài)菜單標(biāo)簽庫(kù)治理由javascript創(chuàng)建菜單的復(fù)雜過(guò)程,并答應(yīng)web應(yīng)用通過(guò)數(shù)據(jù)庫(kù)或xml源創(chuàng)建動(dòng)態(tài)等級(jí)菜單。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产又白又嫩又紧又爽18p | 日日艹夜夜艹 | 精品国产高清一区二区三区 | 日韩每日更新 | 狠狠干91| 深夜毛片免费看 | 免费观看黄色一级视频 | 久久精品日韩一区 | 国产精品免费麻豆入口 | 国产精品色在线网站 | 精品久久久久久中文字幕 | 日韩蜜桃视频 | 欧美性生活久久 | 国产精品久久久久免费视频 | 亚洲午夜视频在线 | 在线91视频| 久久6国产 | 黄色av免费电影 | 中国3xxxx| 日本精品视频一区二区三区四区 | 吾色视频 | 在线观看麻豆 | 欧美男女爱爱视频 | 插插操 | 精品一区二区中文字幕 | 欧美一级做一a做片性视频 日韩黄色片免费看 | 久久久资源网 | 国产乱淫av片免费观看 | 毛片免费在线播放 | 在线观看免费视频麻豆 | 久久精品中文字幕一区 | 免费a视频| 欧美久久一区 | 91 视频网站 | h视频在线观看免费 | 国产精品美女一区二区 | 国产免费成人 | 成人影片在线免费观看 | 色婷婷一区二区三区 | 亚洲一区 国产 | 国产亚洲精品久久久久久网站 |