自己项目中用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);
}
}
大致如此。自己在整理一下,有点乱。
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);
}
}
大致如此。自己在整理一下,有点乱。
相关文章推荐
- BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- 框架 day54 BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- 用struts-menu实现轻松实现网页菜单
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十五节--缓存小结与ABP框架项目中 Redis Cache的实现
- 模块管理常规功能自己定义系统的设计与实现(31--第三阶段 权限设计[1])
- 仿SiteMap实现Asp.net 网站的菜单和权限管理
- html框架中的动态权限树(Struts-Menu实现)
- Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载
- 基于 RBAC 简单实现动态菜单及权限管理
- 使用struts-menu_详细(1)实现动态菜单
- 项目视频讲解_基于LigerUI前端技术实现的管理平台(纯静态页面,json,工作流及权限管理)
- JSF项目中实现基于RBAC模型的权限管理设计
- YbSoftwareFactory 代码生成插件【十一】:ASP.NET WebApi MVC下组织机构管理和菜单权限管理的实现
- Spring项目集成ShiroFilter简单实现权限管理
- 模块管理常规功能自定义系统的设计与实现(05--权限和菜单)
- yii2搭建完美后台并实现rbac权限控制案例 - 之菜单menu详细教程
- 052医疗项目-模块五:权限设置-实现根据用户显示不同的菜单
- 项目视频讲解_基于SpringSecurity3.x, JasperReport5.x等技术实现仿金蝶权限管理的企业信息管理系统
- Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单
- 用ASP+XML实现CSDN的菜单(数据库),可分权限管理