001: /*
002: * $Id: TabbedPanel.java 565265 2007-08-13 08:18:07Z rgielen $
003: *
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021: package org.apache.struts2.components;
022:
023: import javax.servlet.http.HttpServletRequest;
024: import javax.servlet.http.HttpServletResponse;
025:
026: import org.apache.struts2.views.annotations.StrutsTag;
027: import org.apache.struts2.views.annotations.StrutsTagAttribute;
028:
029: import com.opensymphony.xwork2.util.ValueStack;
030:
031: /**
032: * <!-- START SNIPPET: javadoc -->
033: * The tabbedpanel widget is primarily an AJAX component, where each tab can either be local content or remote
034: * content (refreshed each time the user selects that tab).</p>
035: * If the useSelectedTabCookie attribute is set to true, the id of the selected tab is saved in a cookie on activation.
036: * When coming back to this view, the cookie is read and the tab will be activated again, unless an actual value for the
037: * selectedTab attribute is specified.</p>
038: * If you want to use the cookie feature, please be sure that you provide a unique id for your tabbedpanel component,
039: * since this will also be the identifying name component of the stored cookie.</p>
040: * <!-- END SNIPPET: javadoc -->
041: *
042: * <p/> <b>Examples</b>
043: * <p/>
044: * <!-- START SNIPPET: exdesc -->
045: * The following is an example of a tabbedpanel and panel tag utilizing local and remote content.<p/>
046: * <!-- END SNIPPET: exdesc -->
047: * <pre>
048: * <!-- START SNIPPET: example -->
049: * <s:tabbedPanel id="test" >
050: * <s:div id="one" label="one" theme="ajax" labelposition="top" >
051: * This is the first pane<br/>
052: * <s:form>
053: * <s:textfield name="tt" label="Test Text"/> <br/>
054: * <s:textfield name="tt2" label="Test Text2"/>
055: * </s:form>
056: * </s:div>
057: * <s:div id="three" label="remote" theme="ajax" href="/AjaxTest.action" >
058: * This is the remote tab
059: * </s:div>
060: * </s:tabbedPanel>
061: * <!-- END SNIPPET: example -->
062: * </pre>
063: *
064: */
065: @StrutsTag(name="tabbedPanel",tldTagClass="org.apache.struts2.views.jsp.ui.TabbedPanelTag",description="Render a tabbedPanel widget.")
066: public class TabbedPanel extends ClosingUIBean {
067: public static final String TEMPLATE = "tabbedpanel";
068: public static final String TEMPLATE_CLOSE = "tabbedpanel-close";
069: final private static String COMPONENT_NAME = TabbedPanel.class
070: .getName();
071:
072: protected String selectedTab;
073: protected String closeButton;
074: protected String doLayout;
075: protected String templateCssPath;
076: protected String useSelectedTabCookie;
077:
078: public TabbedPanel(ValueStack stack, HttpServletRequest request,
079: HttpServletResponse response) {
080: super (stack, request, response);
081: }
082:
083: protected void evaluateExtraParams() {
084: super .evaluateExtraParams();
085:
086: if (selectedTab != null)
087: addParameter("selectedTab", findString(selectedTab));
088: if (closeButton != null)
089: addParameter("closeButton", findString(closeButton));
090: addParameter("doLayout", doLayout != null ? findValue(doLayout,
091: Boolean.class) : Boolean.FALSE);
092: if (labelPosition != null) {
093: //dojo has some weird name for label positions
094: if (labelPosition.equalsIgnoreCase("left"))
095: labelPosition = "left-h";
096: if (labelPosition.equalsIgnoreCase("right"))
097: labelPosition = "right-h";
098: addParameter("labelPosition", null);
099: addParameter("labelPosition", labelPosition);
100: }
101: if (templateCssPath != null)
102: addParameter("templateCssPath", findString(templateCssPath));
103: if (useSelectedTabCookie != null) {
104: addParameter("useSelectedTabCookie",
105: findString(useSelectedTabCookie));
106: }
107: }
108:
109: public String getDefaultOpenTemplate() {
110: return TEMPLATE;
111: }
112:
113: protected String getDefaultTemplate() {
114: return TEMPLATE_CLOSE;
115: }
116:
117: public String getComponentName() {
118: return COMPONENT_NAME;
119: }
120:
121: @StrutsTagAttribute(description="The id to assign to the component.",required=true)
122: public void setId(String id) {
123: // This is required to override tld generation attributes to required=true
124: super .setId(id);
125: }
126:
127: @StrutsTagAttribute(description=" The id of the tab that will be selected by default")
128: public void setSelectedTab(String selectedTab) {
129: this .selectedTab = selectedTab;
130: }
131:
132: @StrutsTagAttribute(description="Where the close button will be placed, possible values are 'tab' and 'pane'")
133: public void setCloseButton(String closeButton) {
134: this .closeButton = closeButton;
135: }
136:
137: @StrutsTagAttribute(description="If doLayout is false, the tab container's height equals the height of the currently selected tab",type="Boolean",defaultValue="false")
138: public void setDoLayout(String doLayout) {
139: this .doLayout = doLayout;
140: }
141:
142: @StrutsTagAttribute(description="Template css path")
143: public void setTemplateCssPath(String templateCssPath) {
144: this .templateCssPath = templateCssPath;
145: }
146:
147: @StrutsTagAttribute(required=false,defaultValue="false",description="If set to true, the id of the last selected " + "tab will be stored in cookie. If the view is rendered, it will be tried to read this cookie and activate " + "the corresponding tab on success, unless overridden by the selectedTab attribute. The cookie name is \"Struts2TabbedPanel_selectedTab_\"+id.")
148: public void setUseSelectedTabCookie(String useSelectedTabCookie) {
149: this.useSelectedTabCookie = useSelectedTabCookie;
150: }
151: }
|