JSP标签库实现下拉菜单

在Web开发中,下拉菜单是一种常见的用户界面元素,它允许用户通过点击一个按钮或链接来展开一个菜单列表。本文将介绍如何使用JSP标签库来实现一个支持多级菜单的下拉菜单。

下拉菜单的实现

这个下拉菜单目前只支持两级,但通过添加新的CSS规则,它可以支持更多的级别。HTML标记受到Stu Nicholl的CSS Play和Dynamic Drive网站上的示例的影响。作者重写了CSS,并添加了基于jQuery的鼠标悬停效果。

使用这个标签库非常简单,只需声明标签库并使用标签本身,如下所示的代码片段。请记住,这个标签的jar文件必须存在于应用程序的"WEB-INF/lib"文件夹中。

<%@ taglib uri="http://bizsutra.blogspot.com/jsp/tags/ui" prefix="uitags" %> <uitags:dlmenubar menuData="${sessionScope.MENUDATA}" id="sitemenu" cssOnly="false" />

下表总结了Drop Line Menu标签库的各种属性。

属性 描述
onMenuClicked 用户点击菜单项时调用的客户端JavaScript函数的名称。这是一个可选属性。如果没有指定,则控件假定HTML页面或链接到页面的JavaScript文件中存在一个名为onMenuItemClicked的全局函数。该函数接收以下参数:目标URL、菜单项ID和菜单ID。
onModuleClicked 用户点击顶级菜单栏项时调用的客户端JavaScript函数的名称。这是一个可选属性。如果没有指定,则控件假定HTML页面或链接到页面的JavaScript文件中存在一个名为onModuleClicked的全局函数。该函数接收以下参数:组ID和菜单ID。
itemLabelPrefix 用于检索菜单项描述的本地化版本的键的前缀文本。实际的键是通过将此文本前缀到菜单项的序列号上,用点分隔形成的。默认值为"menuitem.label"。
groupLabelPrefix 用于检索顶级菜单栏项描述的本地化版本的键的前缀文本。实际的键是通过将此文本前缀到菜单栏项的序列号上,用点分隔形成的。默认值为"menugrp.label"。
menuData* 用于菜单渲染的实际数据。预期的数据类型是JSONObject。
cssOnly 一个布尔标志,当设置为true时,渲染一个纯CSS驱动的下拉菜单。默认值为true。
id* 这个实例的唯一标识符。这个属性确保多个菜单控件不会相互干扰。

菜单使用JSON数据结构作为输入。menuData本身是一个JSONObject,它有一个名为menu的属性,其值是JSONArray数据类型。菜单数据不包含顶级菜单栏项的条目。相反,顶级菜单栏是通过使用group_id属性的不同值派生的。这种方案通常适用于多模块业务应用程序,每个模块都有一组菜单和子菜单。

{ "menu" : [ { "description" : "viewall.frm", "group_id" : "Mobile", "isGroup" : false, "name" : "View All", "serial" : 1, }, { "description" : "", "group_id" : "Mobile", "isGroup" : true, "name" : "Mobile Phones", "serial" : 2, "submenus" : [ { "description" : "loanCenter.form", "group_id" : "Mobile", "isGroup" : false, "name" : "Android Phones", "serial" : 3, }, ... ] }, ... ] }

下表总结了JSON数据结构中的各种属性。

属性 描述
description 当点击菜单项时,此属性表示要导航到的URL。对于组,值为Empty。
group_id 顾名思义,此属性表示组ID或模块ID。此属性的不同值用于渲染顶级菜单栏。
isGroup 一个布尔属性,表示当前条目是否代表一组菜单或单个菜单项。
name 此菜单项的默认描述。如果找不到本地化的表示,菜单控件将使用此描述。
serial 标识此菜单条目的唯一序列号。

顶级菜单栏项的ID是通过将group_id属性的值与文本"mbar_"前缀来构建的。菜单项的ID是通过将group_id属性的值与所有父级的serial属性值用下划线"_"分隔,然后前缀为"_"来构建的。

主题完全使用CSS完成。总共有四个CSS文件,如下所述。

  • cssdlm.css -CSSOnly菜单实现的基础CSS。
  • cssdlm-skin.css - 用于主题化CSSOnly菜单的CSS。
  • jsdlm.css -jQuery基础菜单实现的基础CSS。
  • jsdlm-skin.css - 用于主题化jQuery基础菜单的CSS。

标签库是本地化感知的,并且可以以本地化的语言渲染菜单。本地化是通过资源包实现的。资源包是一个Java属性文件,包含键值对,其中键是通过将itemLabelPrefix或groupLabelPrefix前缀,后跟一个点"."和菜单序列号形成的。值表示要显示的本地化文本。

这个标签库使用了以下第三方库:

库名称 版本 类型
json-lib-2.2.3-jdk15.jar 2.2.3 运行时(服务器)
slf4j-api-1.6.4.jar 1.6.4 运行时(服务器)
spring-context-2.5.6.jar 2.5.6 运行时(服务器)
spring-core-2.5.6.jar 2.5.6 运行时(服务器)
spring-web-2.5.6.jar 2.5.6 运行时(服务器)
jquery-1.7.1.min.js * 运行时(客户端)
servlet-api-2.4.jar * 编译(服务器)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485