struts-menu与velocity

Velocity 是一个基于 Java 的模板引擎,它提供了简单的基于模板的语言,可以用类似脚本的方式引用对象。Velocity 促进了分离团队成员之间的责任:允许 Web 设计人员专注于视图(即页面的观感),而 Java 程序员专注于后端代码。把 Java 代码从页面布局中分离出来,会让 Web 应用程序未来更易维护。当 Velocity 与 Sruts 这样的 MVC 框架结合时,就成了 JSP 或 PHP 可行的替代。
特点:
 模板引擎中最强大、使用最频繁的功能之一是它通过内建的映像(Reflection)引擎查找对象信息的能力。这个映像引擎允许用一种方便的Java“.”类似的操作符,提取任意加入到VelocityContext的对象的任何公用方法的值,或对象的任意数据成员。

作用:
1.允许我们在模版中设定变量,然后在运行时,动态的将数据插入到模版中,替换这些变量。
2.有用来比较和迭代的内建指令,通过这些指令我们可以完成程序语言中的条件判断语句和循环语句等
3.模板引擎最常见的用途是处理HTMLWeb内容。但我还用模板引擎生成过SQL、email、XML甚至Java源代码。

struts-menu与velocity三级菜单的实现:

vm文件:

#macro( displaySingleMenu $menu )
#if ($displayer.isAllowed($menu))
    #set ($title = $displayer.getMessage($menu.title))
    #if (!$menu.url) #set ($url="javascript:void(0)") #else #set ($url=$menu.url) #end
    <li class="#if ($menu.name == $currentMenu)active#end">
        <a href="$url" title="$title" #if($menu.target)target="$menu.target" #end#if($menu.width)style="width: ${menu.width}px"#end>${title}</a>
    </li>
  #end
#end

#macro( displayDropDownMenu $menu)
#if ($displayer.isAllowed($menu))
    #set ($title = $displayer.getMessage($menu.title))
    #if (!$menu.url) #set ($url="javascript:void(0)") #else #set ($url=$menu.url) #end
        #set($vaildcount = 0)
        #foreach ($menuIt in $menu.components)
	    #if($displayer.isAllowed($menuIt))
	        #set($vaildcount = 1)
	    #end
	#end
	
	#if($vaildcount == 1)
	    <li class="dropdown">
	         <a href="$url" title="$title" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">${title}<span class="caret"></span></a>
		 <ul class="dropdown-menu">
		   #foreach ($menuIt in $menu.components)
		         #if ($menuIt.components.size() == 0)
				#displaySingleMenu($menuIt)
			 #else
				#displayDropDownSubMenu($menuIt)
			 #end
		   #end
		 </ul>
		</li>
	#else
	    #displaySingleMenu($menu)
	#end
	
 	       
	 
    #end
#end

#macro( displayDropDownSubMenu $menu)
#if ($displayer.isAllowed($menu))
    #set ($title = $displayer.getMessage($menu.title))
    #if (!$menu.url) #set ($url="javascript:void(0)") #else #set ($url=$menu.url) #end
    
	#if ($menu.components.size() == 0)
		#displaySingleMenu($menu)
	 #else
	    <li class="dropdown-submenu"><a href="$url" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">${title}</a>
        	<ul class="dropdown-menu" role="menu">
		
		    #foreach ($menuIt in $menu.components)
			 #if ($menuIt.components.size() == 0)
				#displaySingleMenu($menuIt)
			 #else
				#displayDropDownSubMenu($menuIt)
			 #end
		    #end
		    
        	</ul>
             </li>
         #end
	 
    #end
#end

#macro( displayCssMenu $menu )
 #if ($displayer.isAllowed($menu))
    ## create a single menu item
    #if ($menu.components.size() == 0)
        #displaySingleMenu($menu)
    #else 
	## create multiple menu items in a menu
        #displayDropDownMenu($menu)
    #end
  #end
#end

#displayCssMenu($menu)


jsp页面:

<%@ include file="/common/taglibs.jsp"%>

<menu:useMenuDisplayer name="Velocity" config="navbarMenu.vm" permissions="rolesAdapter">
<div class="nav-collapse collapse">
<ul class="nav">
    <c:if test="${empty pageContext.request.remoteUser}">
        <li class="active">
            <a href="<c:url value="/login"/>"><fmt:message key="login.title"/></a>
        </li>
    </c:if>

	<menu:displayMenu name="MainMenu"/>
    <menu:displayMenu name="UserMenu"/>
    <menu:displayMenu name="AdminMenu"/>
</ul>
</div>
</menu:useMenuDisplayer>

<?xml version="1.0" encoding="UTF-8"?>
<MenuConfig>
    <Displayers>
        <Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
    </Displayers>
    <Menus>
		<Menu name="MainMenu" title="mainMenu.title" page="/mainMenu" roles="ROLE_ADMIN,ROLE_USER"/>
        <Menu name="UserMenu" title="menu.user" description="User Menu" page="/userform" roles="ROLE_ADMIN,ROLE_USER"/>
        <Menu name="AdminMenu" title="menu.admin" description="Admin Menu" roles="ROLE_ADMIN" page="/admin/users">
            <Item name="ViewUsers" title="menu.admin.users" page="/admin/users"/>
            <Item name="ActiveUsers" title="mainMenu.activeUsers" page="/admin/activeUsers"/>
            <Item name="ReloadContext" title="menu.admin.reload" page="/admin/reload"/>
            <Item name="FileUpload" title="menu.selectFile" page="/fileupload"/>
        </Menu>
    </Menus>
</MenuConfig>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值