分享
 
 
 

可简化生成JScript过程的自定义标签库

王朝html/css/js·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

菜单是软件应用的重要组件。实现静态菜单相对来说比较简单――仅需一次性的自定义分类和功能即可。对于一个动态菜单,由于每个用户的资料和参数都不尽相同,实现起来既具有挑战性,又显得十分棘手。

java程序语言内置了创建基本菜单的架构,而jsp缺少此项支持。Web应用必须使用Java applets或javascript来实现菜单结构。许多web应用开发人员偏爱于Javascript(它比applets更易开发)。本文将讲述一个可简化生成动态javascript过程的自定义标签库,包括标签库的设计和实现等内容。

设计方案

我们的设计目标是一个可以实现等级分类的对象模型,包括产生javascript的方法。

在实现等级分类的菜单系统中,每个菜单都包括一个或多个菜单项或子菜单,子菜单又可以展开包括菜单项和子菜单。菜单提供了实现程序具体功能的入口。不管菜单是何种类型,菜单对象都应该可以产生适当的javascript。

在基于复合物的设计模式上,simple menu在叶层次上实现了菜单,composite menu在菜单架构上实现了子菜单组和simple menu。换句话说:Composite可以包含SimpleMenu对象和其他CompositeMenu对象的列表。Menu抽象类声明了menu,定义了render方法供子类提供各自的实现。

下图描述了此复合物的设计模式:

菜单类的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源创建动态等级菜单。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有