You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2006/04/07 21:20:43 UTC

svn commit: r392370 - in /incubator/tobago/trunk: core/src/main/java/org/apache/myfaces/tobago/ajax/api/ core/src/main/java/org/apache/myfaces/tobago/component/ theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag...

Author: weber
Date: Fri Apr  7 12:20:39 2006
New Revision: 392370

URL: http://svn.apache.org/viewcvs?rev=392370&view=rev
Log:
make box reloadable by ajax (currently speyside only)

Modified:
    incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
    incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIPanel.java
    incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UITabGroup.java
    incubator/tobago/trunk/theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag/BoxRenderer.java
    incubator/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js

Modified: incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java?rev=392370&r1=392369&r2=392370&view=diff
==============================================================================
--- incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java (original)
+++ incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java Fri Apr  7 12:20:39 2006
@@ -119,16 +119,26 @@
 
       // TODO: handle phaseListeners ??
 
-      component.processValidators(facesContext);
-      viewRoot.broadcastEventsForPhase(facesContext, PhaseId.PROCESS_VALIDATIONS);
+      if (!facesContext.getRenderResponse()) {
+        component.processValidators(facesContext);
+        viewRoot.broadcastEventsForPhase(facesContext, PhaseId.PROCESS_VALIDATIONS);
+      } else if (LOG.isDebugEnabled()) {
+        LOG.debug("Skipping validate");
+      }
 
       if (!facesContext.getRenderResponse()) {
         component.processUpdates(facesContext);
         viewRoot.broadcastEventsForPhase(facesContext, PhaseId.UPDATE_MODEL_VALUES);
+      } else if (LOG.isDebugEnabled()) {
+
+      }  {
+        LOG.debug("Skipping updates");
       }
 
       if (!facesContext.getRenderResponse()) {
         viewRoot.processApplication(facesContext);
+      } else if (LOG.isDebugEnabled()) {
+        LOG.debug("Skipping application");
       }
 
       ((AjaxComponent) component).encodeAjax(facesContext);

Modified: incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIPanel.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIPanel.java?rev=392370&r1=392369&r2=392370&view=diff
==============================================================================
--- incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIPanel.java (original)
+++ incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIPanel.java Fri Apr  7 12:20:39 2006
@@ -16,6 +16,10 @@
  * limitations under the License.
  */
 
+import org.apache.myfaces.tobago.ajax.api.AjaxComponent;
+import org.apache.myfaces.tobago.ajax.api.AjaxPhaseListener;
+import org.apache.myfaces.tobago.ajax.api.AjaxUtils;
+
 import javax.faces.context.FacesContext;
 import java.io.IOException;
 
@@ -24,7 +28,8 @@
  * Date: Feb 28, 2005
  * Time: 3:05:19 PM
  */
-public class UIPanel extends javax.faces.component.UIPanel {
+public class UIPanel extends javax.faces.component.UIPanel
+    implements AjaxComponent {
 
   public static final String COMPONENT_TYPE = "org.apache.myfaces.tobago.Panel";
 
@@ -38,5 +43,21 @@
    if (isRendered()) {
      UILayout.getLayout(this).encodeChildrenOfComponent(facesContext, this);
    }
+  }
+
+
+  public void encodeAjax(FacesContext facesContext) throws IOException {
+    AjaxUtils.encodeAjaxComponent(facesContext, this);    
+  }
+
+  public void processAjax(FacesContext facesContext) throws IOException {
+    final String ajaxId = (String) facesContext.getExternalContext()
+        .getRequestParameterMap().get(AjaxPhaseListener.AJAX_COMPONENT_ID);
+
+    if (ajaxId.equals(getClientId(facesContext))) {
+      AjaxUtils.processActiveAjaxComponent(facesContext, this);
+    } else {
+      AjaxUtils.processAjaxOnChildren(facesContext, this);
+    }
   }
 }

Modified: incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UITabGroup.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UITabGroup.java?rev=392370&r1=392369&r2=392370&view=diff
==============================================================================
--- incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UITabGroup.java (original)
+++ incubator/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UITabGroup.java Fri Apr  7 12:20:39 2006
@@ -23,7 +23,6 @@
 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_STATE;
 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_SWITCH_TYPE;
 import org.apache.myfaces.tobago.ajax.api.AjaxComponent;
-import org.apache.myfaces.tobago.ajax.api.AjaxPhaseListener;
 import org.apache.myfaces.tobago.ajax.api.AjaxUtils;
 import org.apache.myfaces.tobago.event.TabChangeListener;
 import org.apache.myfaces.tobago.event.TabChangeSource;
@@ -261,18 +260,6 @@
     setRenderedIndex(activeIndex);
     AjaxUtils.encodeAjaxComponent(facesContext, this);
   }
-
-  public void processAjax(FacesContext facesContext) throws IOException {
-    final String ajaxId = (String) facesContext.getExternalContext()
-        .getRequestParameterMap().get(AjaxPhaseListener.AJAX_COMPONENT_ID);
-
-    if (ajaxId.equals(getClientId(facesContext))) {
-      AjaxUtils.processActiveAjaxComponent(facesContext, this);
-    } else {
-      AjaxUtils.processAjaxOnChildren(facesContext, this);
-    }
-  }
-
 
   public int getActiveIndex() {
     return activeIndex;

Modified: incubator/tobago/trunk/theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag/BoxRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag/BoxRenderer.java?rev=392370&r1=392369&r2=392370&view=diff
==============================================================================
--- incubator/tobago/trunk/theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag/BoxRenderer.java (original)
+++ incubator/tobago/trunk/theme/speyside/src/main/java/org/apache/myfaces/tobago/renderkit/html/speyside/standard/tag/BoxRenderer.java Fri Apr  7 12:20:39 2006
@@ -31,6 +31,8 @@
 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_SUPPPRESS_TOOLBAR_CONTAINER;
 import static org.apache.myfaces.tobago.TobagoConstants.FACET_LABEL;
 import static org.apache.myfaces.tobago.TobagoConstants.FACET_TOOL_BAR;
+import org.apache.myfaces.tobago.ajax.api.AjaxRenderer;
+import org.apache.myfaces.tobago.ajax.api.AjaxUtils;
 import org.apache.myfaces.tobago.renderkit.BoxRendererBase;
 import org.apache.myfaces.tobago.renderkit.RenderUtil;
 import org.apache.myfaces.tobago.renderkit.html.HtmlRendererUtil;
@@ -44,7 +46,7 @@
 import java.io.IOException;
 import java.util.Map;
 
-public class BoxRenderer extends BoxRendererBase {
+public class BoxRenderer extends BoxRendererBase implements AjaxRenderer {
 
   private static final Log LOG = LogFactory.getLog(BoxRenderer.class);
 
@@ -72,10 +74,20 @@
       // TODO
     }
 
+    String clientId = component.getClientId(facesContext);
+
     writer.startElement("div", component);
     writer.writeComponentClass();
+    writer.writeIdAttribute(clientId);
     writer.writeAttribute("style", style, null);
 
+    HtmlRendererUtil.writeJavascript(writer,
+        "Tobago.addAjaxComponent(\"" + clientId + "\")");
+
+    encodeBeginInner(facesContext, writer, component);
+  }
+
+  private void encodeBeginInner(FacesContext facesContext, TobagoResponseWriter writer, UIComponent component) throws IOException {
     renderBoxHeader(facesContext, writer, component);
 
 
@@ -89,7 +101,7 @@
 
 
   protected void renderBoxHeader(FacesContext facesContext,
-      TobagoResponseWriter writer, UIComponent component) throws IOException {
+                                 TobagoResponseWriter writer, UIComponent component) throws IOException {
 
     writer.startElement("div", component);
     writer.writeClassAttribute("tobago-box-header");
@@ -115,14 +127,19 @@
   public void encodeEndTobago(FacesContext facesContext,
       UIComponent component) throws IOException {
     ResponseWriter writer = facesContext.getResponseWriter();
+
+    encodeEndInner(writer);
+
     writer.endElement("div");
-    writer.endElement("div");
+  }
 
+  private void encodeEndInner(ResponseWriter writer) throws IOException {
+    writer.endElement("div");
     writer.endElement("div");
   }
 
   protected void renderToolbar(FacesContext facesContext,
-      TobagoResponseWriter writer, UIPanel toolbar) throws IOException {
+                               TobagoResponseWriter writer, UIPanel toolbar) throws IOException {
     final Map attributes = toolbar.getAttributes();
     String className = "tobago-box-header-toolbar-div";
     if (ToolBarTag.LABEL_OFF.equals(attributes.get(ATTR_LABEL_POSITION))) {
@@ -141,5 +158,15 @@
     writer.endElement("div");
   }
 
+  public void encodeAjax(FacesContext facesContext, UIComponent component) throws IOException {
+    AjaxUtils.checkParamValidity(facesContext, component, UIPanel.class);
+    TobagoResponseWriter writer
+        = (TobagoResponseWriter) facesContext.getResponseWriter();
+
+    encodeBeginInner(facesContext, writer, component);
+    component.encodeChildren(facesContext);
+    encodeEndInner(writer);
+    facesContext.responseComplete();
+  }
 }
 

Modified: incubator/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js?rev=392370&r1=392369&r2=392370&view=diff
==============================================================================
--- incubator/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js (original)
+++ incubator/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js Fri Apr  7 12:20:39 2006
@@ -136,6 +136,8 @@
     */
   scriptLoaders: new Array(),
 
+  ajaxComponents: {},
+
    /**
     * Flag indicating that the page is complete loaded.
     */
@@ -369,6 +371,25 @@
     }
   },
 
+  addAjaxComponent: function(componentId, containerId) {
+    if (! containerId) {
+      containerId = componentId;
+    }
+    this.ajaxComponents[componentId] = containerId;
+  },
+
+  reloadComponent: function(id, actionId) {
+    var containerId = this.ajaxComponents[id];
+    if (containerId) {
+      if (!actionId) {
+        actionId = containerId;
+      }
+      Tobago.Updater.update(this.element(containerId), this.page, actionId, id);
+    } else {
+      LOG.warn("Can't find container for '" + id + "'! skip reload!");
+    }
+  },
+
    /**
     * Mouseover function for images.
     */
@@ -1065,6 +1086,14 @@
 };
 
 Tobago.Updater = {
+
+  options: {
+    method: 'post',
+    asynchronous: true,
+    parameters: '',
+    evalScripts: true
+  },
+
   update: function(container, page, actionId, ajaxComponentId, options) {
 
     if (this.hasTransport()) {
@@ -1075,7 +1104,7 @@
 
       Tobago.createOverlay(container);
       //    LOG.debug("request url = " + url);
-      new Ajax.Updater(container, url, options);
+      new Ajax.Updater(container, url, options || this.options);
     } else {
       LOG.info("No Ajax transport found! Doing full page reload.");
       Tobago.submitAction(actionId);