您的位置:首页 > 编程语言 > Java开发

自己项目中用struts menu 实现的菜单+权限管理

2014-03-19 11:15 405 查看
接上篇:struts2
menu菜单及权限管理

menu.jsp 书写如下:

<div class="con_left">

<menu:useMenuDisplayer name="dspMenu" config="DspMenuDisplayer" permissions="dspMenuPerssion">

<ul class="list_one">

<menu:displayMenu name="manageMedia"/><!-- 媒体管理 -->

<menu:displayMenu name="manageAd"/><!-- 广告主管理 -->

<menu:displayMenu name="manageOrderList"/><!-- 订单管理 -->

<menu:displayMenu name="manageIdea"/><!-- 创意管理 -->

<menu:displayMenu name="manageLaunch" /><!-- 投放管理 -->

<menu:displayMenu name="AdminMenu" />
<!-- 系统管理 -->

</ul>

</menu:useMenuDisplayer>

</div>

解释:

name="dspMenu":在menu-config里面配置:

<Displayers>

<Displayer name="Velocity"type="net.sf.navigator.displayer.VelocityMenuDisplayer" />

<Displayer name="dspMenu" type="com.geo.dsp.webapp.util.DspMenuDisplayer" />

</Displayers>

permissions:用于权限控制,项目中有DspMenuPerssionAdapter这个类,继承了permissionsadapter。(上篇文章中有提到这个类),此方法中有定义:

public static final String DSPMENUPERSSION="dspMenuPerssion";

config="DspMenuDisplayer":指向一个文件。DspMenuDisplayer.properties中有定义的一些在DspMenuDisplayer 使用的字符变量:代码如下:

lmd.menu.bottom=\t</li>

lmd.menu.item=\t<li ></li>\n

lmd.menu.standalone=\t<p><a href="{0}" title="{1}" class="standalone"{2}>{3}</a></p>

ccslm.menu.top=\t<li{0}

ccslm.menubar.top=\t<li class="{0}"><span>-</span><a href="{1}" target="{2}">{3}</a></li>\n

lmd.end=</ul>

lmd.begin=<ul >\n

span.state=<span class="open"></span>\n

a.left=<a class="one_a" href="javascript:;onclick=show({0}) ">

a.right=</a>\n

li.begin=<li id=

u.begin=<ul class="list_two" id="list_{0}">\n

a.begin=<li class="{0}"><span>-</span>{1}</li>

ccslm.menubar.top2=\t<li class="{0}"><span>-</span>{1}</a></li>\n

web.xml中配置菜单的监听器:

<listener>

<listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>

</listener>

MenuContextListener里面会根据menuConfig的路径(自己menu-config配置文件的路径一定要和这个一样)去找到关于menu的配置(也就是自定义的menu-config).然后根据type属性会执行DspMenuDisplayer,拼接出菜单。(定义多个displayer的 话是不是第一个就被覆盖了?)

DspMenuDisplayer 代码如下,需继承CSSListMenuDisplayer!其实只是为了实现menudisplayer。

public class DspMenuDisplayer extends CSSListMenuDisplayer{

public void display(MenuComponent menu) throws JspException, IOException {

if (isAllowed(menu)) {

out.print(displayStrings.getMessage("ccslm.menu.top",

(hasViewableChildren(menu)) ? " id=\""+menu.getLocation()+"\"" : ""));

out.print(" class=\"list_one_li\"");

out.print(">");

out.print(displayStrings.getMessage("a.left",menu.getOnclick()));

out.print(this.getMessage(menu.getTitle()));

out.println(displayStrings.getMessage("a.right"));

out.println(displayStrings.getMessage("u.begin",menu.getOnclick()));

// out.println(displayStrings.getMessage("span.state"));

displayComponents(menu, 0);

out.println("</ul>");

out.println("</li>");



}

}

protected void displayComponents(MenuComponent menu, int level)

throws JspException, IOException {

MenuComponent[] components = menu.getMenuComponents();

if(components.length>0){

for (int i = 0; i < components.length; i++) {

if (isAllowed(components[i])) {

displayComponents(components[i], level + 1);

out.println((hasViewableChildren(components[i]) ? "\t\t</ul>\t" : ""));

}

}

}else{

out.println(displayStrings.getMessage("ccslm.menubar.top",

menu.getImage(),menu.getUrl(),menu.getTarget(),this.getMessage(menu.getTitle())));

}

}

private boolean hasViewableChildren(MenuComponent menu) {

for (int i = 0; i < menu.getMenuComponents().length; i++) {

if (isAllowed(menu.getMenuComponents()[i])) {



return true;

}

}

return false;

}

public void setConfig(String config) {

displayStrings = MessageResources.getMessageResources(config);

}

}

大致如此。自己在整理一下,有点乱。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐