⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabstag.java

📁 基于Jabber协议的即时消息服务器
💻 JAVA
字号:
/** * $RCSfile$ * $Revision: 4092 $ * $Date: 2006-06-24 15:58:11 -0700 (Sat, 24 Jun 2006) $ * * Copyright (C) 2004 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */package org.jivesoftware.admin;import org.jivesoftware.util.StringUtils;import org.dom4j.Element;import javax.servlet.jsp.tagext.BodyTagSupport;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.http.HttpServletRequest;import java.util.List;import java.io.IOException;/** * <p>A simple JSP tag for displaying tab information in the admin console. The * {@link SidebarTag} is similiar to this one.</p> * * <p>Attributes: <ul> *      <li><tt>bean</tt> (required) - the id of the request attribute which is a *      {@link AdminPageBean} instance. This class holds information *      needed to properly render the admin console tabs.</li> *      <li><tt>css</tt> (optional) - the CSS class name used to decorate the LI of the tab.</li> *      <li><tt>currentcss</tt> (optional) - the CSS class name used to decorate the LI of the *      currently selected tab.</li></ul></p> * * <p>This class assumes there is a request attribute with the name specified by the bean attribute.</p> * * <p>This tag prints out minimal HTML. It basically prints an unordered list (UL element) with each * LI containing an "A" tag specfied by the body content of this tag. For example, the body should contain * a template A tag which will have its values replaced at runtime: <ul><tt> * *      &lt;jive:tabs bean="jivepageinfo"&gt; <br> *          &nbsp;&nbsp;&nbsp;&lt;a href="[url]" title="[description]"&gt;[name]&lt;/a&gt; <br> *      &lt;/jive:tabs&gt;</tt></ul> * * Available token are: <ul> *      <li><tt>[id]</tt> - the ID of the tab, usually not needed.</li> *      <li><tt>[name]</tt> - the name of the tab, should be thought of as the display name.</li> *      <li><tt>[url]</tt> - the URL of the tab.</li> *      <li><tt>[description]</tt> - the description of the tab, good for mouse rollovers.</li></ul></p> */public class TabsTag extends BodyTagSupport {    private String bean;    private String css;    private String currentcss;    /**     * The name of the request attribute which holds a {@link AdminPageBean} instance.     */    public String getBean() {        return bean;    }    /**     * Sets the name of the request attribute to hold a {@link AdminPageBean} instance.     */    public void setBean(String bean) {        this.bean = bean;    }    /**     * Returns the value of the CSS class to be used for tab decoration. If not set will return a blank string.     */    public String getCss() {        return clean(css);    }    /**     * Sets the CSS used for tab decoration.     */    public void setCss(String css) {        this.css = css;    }    /**     * Returns the value of the CSS class to be used for the currently selected LI (tab). If not set will     * return a blank string.     */    public String getCurrentcss() {        return clean(currentcss);    }    /**     * Sets the CSS class value for the currently selected tab.     */    public void setCurrentcss(String currentcss) {        this.currentcss = currentcss;    }    /**     * Does nothing, returns {@link #EVAL_BODY_BUFFERED} always.     */    public int doStartTag() throws JspException {        return EVAL_BODY_BUFFERED;    }    /**     * Gets the {@link AdminPageBean} instance from the request. If it doesn't exist then execution is stopped     * and nothing is printed. If it exists, retrieve values from it and render the tabs. The body content     * of the tag is assumed to have an A tag in it with tokens to replace (see class description).     *     * @return {@link #EVAL_PAGE} after rendering the tabs.     * @throws JspException if an exception occurs while rendering the tabs.     */    public int doEndTag() throws JspException {        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();        String beanName = getBean();        // Get the page data bean from the request:        // If the page info bean is not in the request then no tab will be selected - so, it'll fail gracefully        String pageID = (String)request.getAttribute("pageID");        // Get tabs from the model:        List tabs = AdminConsole.getModel().selectNodes("//tab");        if (tabs.size() > 0) {            JspWriter out = pageContext.getOut();            // Build up the output in a buffer (is probably faster than a bunch of out.write's)            StringBuilder buf = new StringBuilder();            buf.append("<ul>");            String body = getBodyContent().getString();            // For each tab, print out an <LI>.            Element currentTab = null;            if (pageID != null) {                currentTab = (Element)AdminConsole.getModel().selectSingleNode(                            "//*[@id='" + pageID + "']/ancestor::tab");            }            for (int i=0; i<tabs.size(); i++) {                Element tab = (Element)tabs.get(i);                String value = body;                if (value != null) {                    // The URL for the tab should be the URL of the first item in the tab.                    String pluginName = tab.attributeValue("plugin");                    value = StringUtils.replace(value, "[id]", clean(tab.attributeValue("id")));                    value = StringUtils.replace(value, "[url]",                            request.getContextPath() + "/" + clean(tab.attributeValue("url")));                    value = StringUtils.replace(value, "[name]",                            clean(AdminConsole.getAdminText(tab.attributeValue("name"), pluginName)));                    value = StringUtils.replace(value, "[description]",                            clean(AdminConsole.getAdminText(tab.attributeValue("description"), pluginName)));                }                String css = getCss();                if (tab.equals(currentTab)) {                    css = getCurrentcss();                }                buf.append("<li class=\"").append(css).append("\">");                buf.append(value);                buf.append("</li>");            }            buf.append("</ul>");            try {                out.write(buf.toString());            }            catch (IOException ioe) {                throw new JspException(ioe.getMessage());            }        }        return EVAL_PAGE;    }    /**     * Cleans the given string - if it's null, it's converted to a blank string. If it has ' then those are     * converted to double ' so HTML isn't screwed up.     *     * @param in the string to clean     * @return a cleaned version - not null and with escaped characters.     */    private String clean(String in) {        return (in == null ? "" : StringUtils.replace(in, "'", "\\'"));    }}

⌨️ 快捷键说明

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