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

📄 tabcontainertag.java

📁 这是一个关于java的JSP页面中设计选项卡的库文件.
💻 JAVA
字号:
/* * The contents of this file are subject to the GNU Lesser General Public * License Version 2.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.gnu.org/copyleft/lesser.html * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * Developer: * Todd Ditchendorf, todd@ditchnet.org * *//** *	@author Todd Ditchendorf *	@version 0.8 *	@since 0.8 */package org.ditchnet.jsp.taglib.tabs.handler;import java.io.StringWriter;import java.io.IOException;import java.util.List;import java.util.ArrayList;import java.util.Iterator;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.JspContext;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;import org.ditchnet.jsp.util.JspResponseWriter;import org.ditchnet.xml.Xhtml;/** *	@author Todd Ditchendorf *	@since 0.8 *	 *	JSP Tag that renders a collection of tabs. */public final class TabContainerTag extends SimpleTagSupport {		public static final String COOKIE_PREFIX = "org.ditchnet.jsp.tabs";	private String id;	private String skin;	private List children;	private String selectedTabPaneId;	private String urlSelectedTabPaneId;	private int selectedIndex = 0;	private int cookieSelectedIndex = -1;	private String jsTabListener;	private JspResponseWriter out = new JspResponseWriter();		public void setId(final String id) {		this.id = id;	}		public String getId() {		return id;	}		public void setSkin(final String skin) {		this.skin = skin.toLowerCase();	}		public String getSkin() {		if (null == skin || 0 == skin.length()) {			skin = "default";		}		return skin;	}		public void setSelectedTabPaneId(final String selectedTabPaneId) {		this.selectedTabPaneId = selectedTabPaneId;	}		public String getSelectedTabPaneId() {		return selectedTabPaneId;	}		void setSelectedIndex(final int selectedIndex) {		this.selectedIndex = selectedIndex - 1;	}		int getSelectedIndex() {		return selectedIndex;	}		private void setCookieSelectedIndex(final int selectedIndex) {		this.cookieSelectedIndex = selectedIndex;	}		private int getCookieSelectedIndex() {		return cookieSelectedIndex;	}		private void setUrlSelectedTabPaneId(final String selectedId) {		this.urlSelectedTabPaneId = selectedId;	}		private String getUrlSelectedTabPaneId() {		return urlSelectedTabPaneId;	}		public void setJsTabListener(final String jsTabListener) {		this.jsTabListener = jsTabListener;	}		public String getJsTabListener() {		return jsTabListener;	}		List getChildren() {		if (null == children) {			children = new ArrayList();		}		return children;	}		int getChildCount() {		return getChildren().size();	}		void addChild(final TabPaneTag child) {		getChildren().add(child);	}	public void doTag() throws JspException, IOException {		consumeCookie();		consumeQueryStringParam();						StringWriter discardResult = new StringWriter();		StringWriter evalResult    = new StringWriter();		out.startElement(Xhtml.Tag.DIV);		out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_SKIN_CLASS_NAME+getSkin());		out.startElement(Xhtml.Tag.DIV);		out.attribute(Xhtml.Attr.ID,id);		out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_CONTAINER_CLASS_NAME);		out.startElement(Xhtml.Tag.DIV);		out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_WRAP_CLASS_NAME);		getJspBody().invoke(evalResult);		evalResult.getBuffer().delete(0,evalResult.getBuffer().length());		determineSelectedIndex();		children = null;		getJspBody().invoke(evalResult);		int i = 0;		for (Iterator iter = children.iterator(); iter.hasNext();) {			TabPaneTag tabPane = (TabPaneTag)iter.next();			out.startElement(Xhtml.Tag.DIV);			out.attribute(Xhtml.Attr.ID,tabPane.getId()+TabConstants.TAB_ID_SUFFIX);			if (null != getJsTabListener() && getJsTabListener().length() > 0) {				out.attribute(Xhtml.Attr.ONCLICK,							  "org.ditchnet.jsp.TabUtils.tabClicked(event);" +				getJsTabListener().trim() + "(new org.ditchnet.jsp.TabEvent(this));");			} else {				out.attribute(Xhtml.Attr.ONCLICK,							  "org.ditchnet.jsp.TabUtils.tabClicked(event);");			}			if (i == getSelectedIndex()) {				out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_CLASS_NAME + " " +											   TabConstants.FOCUSED_CLASS_NAME);			} else {				out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_CLASS_NAME + " " + 											   TabConstants.UNFOCUSED_CLASS_NAME);			}			out.startElement(Xhtml.Tag.SPAN);			out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_BG_LEFT_CLASS_NAME);			out.text(" ");			out.endElement(Xhtml.Tag.SPAN);			out.startElement(Xhtml.Tag.A);			out.attribute(Xhtml.Attr.HREF,getTabUrl(tabPane) +										  TabLinkTag.QUESTION_MARK +										  TabLinkTag.PARAM_NAME_TAB_PANE_ID +										  TabLinkTag.EQUALS +										  tabPane.getId());			out.attribute(Xhtml.Attr.ONCLICK,"return false;");						if (null != tabPane.getTabTitle() &&				0 < tabPane.getTabTitle().length()) {				out.text(tabPane.getTabTitle());			}			out.text(" ");			out.endElement(Xhtml.Tag.A);			out.endElement(Xhtml.Tag.DIV);			i++;		}		out.startElement(Xhtml.Tag.BR);		out.attribute(Xhtml.Attr.CLASS,TabConstants.CLEAR_CLASS_NAME);		out.endElement(Xhtml.Tag.BR);		out.endElement(Xhtml.Tag.DIV);		out.comment(TabConstants.TAB_WRAP_CLASS_NAME);		out.startElement(Xhtml.Tag.DIV);		out.attribute(Xhtml.Attr.CLASS,TabConstants.TAB_PANE_WRAP_CLASS_NAME);		out.text(evalResult.getBuffer().toString());		out.endElement(Xhtml.Tag.DIV);		out.comment(TabConstants.TAB_PANE_WRAP_CLASS_NAME);		out.endElement(Xhtml.Tag.DIV);		out.comment(TabConstants.TAB_CONTAINER_CLASS_NAME);		out.endElement(Xhtml.Tag.DIV);		out.comment(TabConstants.TAB_SKIN_CLASS_NAME+getSkin());				getJspContext().getOut().print(out.getBuffer());	}		private void determineSelectedIndex() {		//check url first		TabPaneTag child;		for (int i = 0; i < getChildCount(); i++) {			child = (TabPaneTag)getChildren().get(i);			if (child.getId().equals(getUrlSelectedTabPaneId())) {				setSelectedIndex(i+1);				return;			}		}		//then check cookie		if (getCookieSelectedIndex() > -1) {			setSelectedIndex(cookieSelectedIndex+1);			return;		}		//then check jsp tag attr		for (int i = 0; i < getChildCount(); i++) {			child = (TabPaneTag)getChildren().get(i);			if (child.getId().equals(getSelectedTabPaneId())) {				setSelectedIndex(i+1);				return;			}		}	}		private String getTabUrl(final TabPaneTag tabPane) {		HttpServletRequest request = getRequest();		return request.getRequestURL().toString();	}		private void consumeQueryStringParam() {		String tabPaneIdParamValue = getRequest().getParameter( 										TabLinkTag.PARAM_NAME_TAB_PANE_ID );		if (null == tabPaneIdParamValue 			|| 0 == tabPaneIdParamValue.length()) {			return;		}		setUrlSelectedTabPaneId( tabPaneIdParamValue );	}		private void consumeCookie() {		Cookie[] cookies = getPageCookies();		Cookie cookie;		String prefix,value;		for (int i = 0; i < cookies.length; i++) {			cookie = cookies[i];			if (isDitchnetTabCookie(cookie)) {				int index = cookie.getName().indexOf(":")+1;				if (isCookieForThisContainer(cookie,index)) {					try {						setCookieSelectedIndex(								Integer.parseInt(cookie.getValue()));					} catch (NumberFormatException e) { }				}			}		}	}		private HttpServletRequest getRequest() {		PageContext pageContext = (PageContext)getJspContext();		HttpServletRequest request = 			(HttpServletRequest)pageContext.getRequest();		return request;	}		private Cookie[] getPageCookies() {		Cookie[] cookies = getRequest().getCookies();		if (null == cookies) {			cookies = new Cookie[0];		}		return cookies;	}		private boolean isDitchnetTabCookie(final Cookie cookie) {		return 0 == cookie.getName().indexOf(COOKIE_PREFIX)	;	}		private boolean isCookieForThisContainer(final Cookie cookie,											 final int index) {		return cookie.getName().substring(index).equals(getId());	}	}

⌨️ 快捷键说明

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