| /* |
| * $Id$ |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.struts2.dojo.components; |
| |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| import org.apache.struts2.views.annotations.StrutsTag; |
| import org.apache.struts2.views.annotations.StrutsTagAttribute; |
| |
| import com.opensymphony.xwork2.util.ValueStack; |
| |
| /** |
| * <!-- START SNIPPET: javadoc --> |
| * <p> |
| * This tag generates an HTML div that loads its content using an XMLHttpRequest call, via |
| * the dojo framework. When the "updateFreq" is set the built in timer will start automatically and |
| * reload the div content with the value of "updateFreq" as the refresh period(in milliseconds). |
| * Topics can be used to stop(stopTimerListenTopics) and start(startTimerListenTopics) this timer. |
| * </p> |
| * <p> |
| * When used inside a "tabbedpanel" tag, each div becomes a tab. Some attributes are specific |
| * to this use case, like: |
| * <ul> |
| * <li>refreshOnShow: div content is realoded when tab is selected</li> |
| * <li>closable: Tab will have close button</li> |
| * <li>preload: load div content after page is loaded</li> |
| * </ul> |
| * </p> |
| * <!-- END SNIPPET: javadoc --> |
| * |
| * <p>Examples</p> |
| * <!-- START SNIPPET: example1 --> |
| * <sx:div href="%{#url}">Initial Content</sx:div> |
| * <!-- END SNIPPET: example1 --> |
| * |
| * <!-- START SNIPPET: example2 --> |
| * <img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" style="display:none"/> |
| * <sx:div href="%{#url}" updateFreq="2000" indicator="indicator"> |
| * Initial Content |
| * </sx:div> |
| * <!-- END SNIPPET: example2 --> |
| * |
| * <!-- START SNIPPET: example3 --> |
| * <form id="form"> |
| * <label for="textInput">Text to be submited when div reloads</label> |
| * <input type=textbox id="textInput" name="data"> |
| * </form> |
| * <sx:div |
| * href="%{#url}" |
| * updateFreq="3000" |
| * listenTopics="/refresh" |
| * startTimerListenTopics="/startTimer" |
| * stopTimerListenTopics="/stopTimer" |
| * highlightColor="red" |
| * formId="form"> |
| * Initial Content |
| * </sx:div> |
| * <!-- END SNIPPET: example3 --> |
| */ |
| @StrutsTag(name="div", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.DivTag", description="Render HTML div providing content from remote call via AJAX") |
| public class Div extends AbstractRemoteBean { |
| |
| public static final String TEMPLATE = "div"; |
| public static final String TEMPLATE_CLOSE = "div-close"; |
| public static final String COMPONENT_NAME = Div.class.getName(); |
| |
| protected String updateFreq; |
| protected String autoStart; |
| protected String delay; |
| protected String startTimerListenTopics; |
| protected String stopTimerListenTopics; |
| protected String refreshOnShow; |
| protected String closable; |
| protected String preload; |
| |
| public Div(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { |
| super(stack, request, response); |
| } |
| |
| public String getDefaultOpenTemplate() { |
| return TEMPLATE; |
| } |
| |
| protected String getDefaultTemplate() { |
| return TEMPLATE_CLOSE; |
| } |
| |
| public void evaluateExtraParams() { |
| super.evaluateExtraParams(); |
| |
| if (updateFreq != null) |
| addParameter("updateFreq", findValue(updateFreq, Integer.class)); |
| if (autoStart != null) |
| addParameter("autoStart", findValue(autoStart, Boolean.class)); |
| if (refreshOnShow != null) |
| addParameter("refreshOnShow", findValue(refreshOnShow, Boolean.class)); |
| if (delay != null) |
| addParameter("delay", findValue(delay, Integer.class)); |
| if (startTimerListenTopics != null) |
| addParameter("startTimerListenTopics", findString(startTimerListenTopics)); |
| if (stopTimerListenTopics != null) |
| addParameter("stopTimerListenTopics", findString(stopTimerListenTopics)); |
| if (separateScripts != null) |
| addParameter("separateScripts", findValue(separateScripts, Boolean.class)); |
| if (closable != null) |
| addParameter("closable", findValue(closable, Boolean.class)); |
| if (preload != null) |
| addParameter("preload", findValue(preload, Boolean.class)); |
| } |
| |
| @StrutsTagAttribute(description="Start timer automatically", type="Boolean", defaultValue="true") |
| public void setAutoStart(String autoStart) { |
| this.autoStart = autoStart; |
| } |
| |
| @StrutsTagAttribute(description="How long to wait before fetching the content (in milliseconds)", type="Integer") |
| public void setDelay(String delay) { |
| this.delay = delay; |
| } |
| |
| @StrutsTagAttribute(description="How often to reload the content (in milliseconds)", type="Integer") |
| public void setUpdateFreq(String updateInterval) { |
| this.updateFreq = updateInterval; |
| } |
| |
| @StrutsTagAttribute(description="Topics that will start the timer (for autoupdate)") |
| public void setStartTimerListenTopics(String startTimerListenTopic) { |
| this.startTimerListenTopics = startTimerListenTopic; |
| } |
| |
| @StrutsTagAttribute(description="Topics that will stop the timer (for autoupdate)") |
| public void setStopTimerListenTopics(String stopTimerListenTopic) { |
| this.stopTimerListenTopics = stopTimerListenTopic; |
| } |
| |
| @StrutsTagAttribute(description="Content will be loaded when div becomes visible, used only inside the tabbedpanel tag", type="Boolean", defaultValue="false") |
| public void setRefreshOnShow(String refreshOnShow) { |
| this.refreshOnShow = refreshOnShow; |
| } |
| |
| @StrutsTagAttribute(description="Show a close button when the div is inside a 'tabbedpanel'", defaultValue="false") |
| public void setClosable(String closable) { |
| this.closable = closable; |
| } |
| |
| @StrutsTagAttribute(description="Load content when page is loaded", type="Boolean", defaultValue="true") |
| public void setPreload(String preload) { |
| this.preload = preload; |
| } |
| |
| @StrutsTagAttribute(description = "Color used to perform a highlight effect on this element", |
| defaultValue = "none") |
| public void setHighlightColor(String highlightColor) { |
| this.highlightColor = highlightColor; |
| } |
| } |