dynamicmenubean.java

来自「OperaMasks是一种基于J2EE的Web开发技术」· Java 代码 · 共 210 行

JAVA
210
字号
/*
 * $Id: DynamicMenuBean.java,v 1.4 2008/08/18 10:39:11 libin Exp $
 *
 * Copyright (C) 2006 Operamasks Community.
 * Copyright (C) 2000-2006 Apusic Systems, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses.
 */
package demo;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.operamasks.faces.annotation.BeforeRender;
import org.operamasks.faces.annotation.ManagedBean;
import org.operamasks.faces.annotation.ManagedBeanScope;
import org.operamasks.faces.annotation.ManagedProperty;
import org.operamasks.faces.component.widget.UISeparator;
import org.operamasks.faces.component.widget.menu.UICommandMenuItem;
import org.operamasks.faces.component.widget.menu.UILinkMenuItem;
import org.operamasks.faces.component.widget.menu.UIMenu;
import org.operamasks.faces.util.FacesUtils;

@ManagedBean(scope=ManagedBeanScope.SESSION)
public class DynamicMenuBean {
    @ManagedProperty
    private List<MenuInfo> menus;
    
    @ManagedProperty 
    private UIMenu menu;
    
    public DynamicMenuBean() {
        initMenu();
    }

    private void initMenu() {
        menus = new ArrayList<MenuInfo>();
        
        MenuInfo menu = new MenuInfo("文件");
        menu.items.add(new MenuItemInfo("新建", "../menu/images/new.gif"));
        menu.items.add(new MenuItemInfo("打开", "../menu/images/open.gif"));
        menu.items.add(new MenuItemInfo("保存", "../menu/images/save.gif"));
        
        menus.add(menu);
        
        menu = new MenuInfo("编辑");
        menu.items.add(new MenuItemInfo("复制", "../menu/images/copy.gif"));
        menu.items.add(new MenuItemInfo("剪切", "../menu/images/cut.gif"));
        menu.items.add(new MenuItemInfo("粘贴", "../menu/images/paste.gif"));
        
        menus.add(menu);
    }

    private class MenuInfo {
        @ManagedProperty
        List<MenuItemInfo> items;
        @ManagedProperty
        String label;
        MenuInfo(String label) {
            this.label = label;
            items = new ArrayList<MenuItemInfo>();
        }
    }
    private class MenuItemInfo {
        @ManagedProperty
        String label;
        @ManagedProperty
        String img;
        @ManagedProperty
        List<MenuItemInfo> items;

        MenuItemInfo(String label, String img) {
            this.label = label;
            this.img = img;
            this.items = new ArrayList<MenuItemInfo>();
        }
    }
    
    public void addMenu1() {
        menu.removeAll();
        UIMenu fileMenu = createMenu("文件", null);
        UIMenu newMenu = createMenu("新建", "../menu/images/new.gif");
        
        UICommandMenuItem item;
        item = (UICommandMenuItem) createMenuItem("文本文件", null, UICommandMenuItem.COMPONENT_TYPE);
        newMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("XML文件", null, UICommandMenuItem.COMPONENT_TYPE);
        newMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("Java文件", null, UICommandMenuItem.COMPONENT_TYPE);
        newMenu.addMenuItem(item);

        fileMenu.addMenu(newMenu);


        item = (UICommandMenuItem) createMenuItem("打开", "../menu/images/open.gif", UICommandMenuItem.COMPONENT_TYPE);
        fileMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("保存", "../menu/images/save.gif", UICommandMenuItem.COMPONENT_TYPE);
        fileMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("另存为", null, UICommandMenuItem.COMPONENT_TYPE);
        item.getAttributes().put("disabled", Boolean.TRUE);
        fileMenu.addMenuItem(item);
        UISeparator separator = (UISeparator) createComponent(UISeparator.COMPONENT_TYPE);
        fileMenu.addMenuItem(separator);
        UILinkMenuItem link = (UILinkMenuItem) createMenuItem("关闭", null, UILinkMenuItem.COMPONENT_TYPE);
        link.setValue("dynamicMenu.jsf");
        link.setOnclick("return confirm('Are you sure?')");
        fileMenu.addMenuItem(link);

        menu.addMenu(fileMenu);
        
        UIMenu editMenu = createMenu("编辑", null);
        menu.addMenu(editMenu);
        item = (UICommandMenuItem) createMenuItem("复制", "../menu/images/copy.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("剪切", "../menu/images/cut.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("粘贴", "../menu/images/paste.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
    }
    
    public void addMenu2() {
        menu.removeAll();
        UIMenu fileMenu = createMenu("搜索", null);
        
        UICommandMenuItem item;
        item = (UICommandMenuItem) createMenuItem("上一个", "../menu/images/open.gif", UICommandMenuItem.COMPONENT_TYPE);
        fileMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("下一个", "../menu/images/save.gif", UICommandMenuItem.COMPONENT_TYPE);
        fileMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("逐字搜索", null, UICommandMenuItem.COMPONENT_TYPE);
        item.getAttributes().put("disabled", Boolean.TRUE);
        fileMenu.addMenuItem(item);

        menu.addMenu(fileMenu);
        
        UIMenu editMenu = createMenu("格式", null);
        menu.addMenu(editMenu);
        item = (UICommandMenuItem) createMenuItem("转为大写", "../menu/images/copy.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("转为小写", "../menu/images/cut.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
        item = (UICommandMenuItem) createMenuItem("去除空格", "../menu/images/paste.gif", UICommandMenuItem.COMPONENT_TYPE);
        editMenu.addMenuItem(item);
    }

    public void addMenu0() {
        menu.removeAll();
        UIMenu fileMenu = createMenu("链接", null);
        
        UILinkMenuItem item;
        item = (UILinkMenuItem) createLinkMenuItem("Operamasks Community", "http://www.operamasks.org");
        fileMenu.addMenuItem(item);
        item = (UILinkMenuItem) createLinkMenuItem("Java Home", "http://java.sun.com");
        fileMenu.addMenuItem(item);
        
        menu.addMenu(fileMenu);        
    }
    private UIMenu createMenu(String label, String img) {
        UIMenu  newMenu = (UIMenu) createComponent(UIMenu.COMPONENT_TYPE);
        newMenu.setLabel(label);
        newMenu.setImage(img);
        return newMenu;
    }

    private UIComponent createMenuItem(String label, String img, String componentType) {
        UIComponent item = createComponent(componentType);
        item.getAttributes().put("label", label);
        item.getAttributes().put("image", img);
        return item;
    }
    
    private UIComponent createLinkMenuItem(String label, String link) {
        UIComponent item = createComponent(UILinkMenuItem.COMPONENT_TYPE);
        item.getAttributes().put("label", label);
        item.getAttributes().put("value", link);
        item.getAttributes().put("target", "_new");
        return item;
    }
    
    private UIComponent createComponent(String componentType) {
        FacesContext context = FacesContext.getCurrentInstance();
        Application app = context.getApplication();
        UIComponent component = app.createComponent(componentType);
        component.setId(context.getViewRoot().createUniqueId());
        return component;
    }
    
    @BeforeRender
    public void beforeRender(boolean isPostBack) {
        if (menu.getChildCount() == 0) {
    	    addMenu0();
    	}
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?