Author: nbelaevski
Date: 2010-12-27 14:16:45 -0500 (Mon, 27 Dec 2010)
New Revision: 20815
Added:
trunk/core/api/src/main/java/org/richfaces/context/ExtendedPartialViewContext.java
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextFactoryImpl.java
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextImpl.java
Removed:
trunk/core/api/src/main/java/org/ajax4jsf/context/AjaxContext.java
trunk/core/api/src/main/java/org/ajax4jsf/context/package-info.java
trunk/core/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextFactoryImpl.java
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIBeanValidator.java
Modified:
trunk/core/api/src/main/java/org/richfaces/renderkit/util/CoreAjaxRendererUtils.java
trunk/core/impl/src/main/resources/META-INF/components.faces-config.xml
trunk/core/impl/src/main/resources/META-INF/faces-config.xml
trunk/examples/input-demo/src/main/webapp/resources/tests/autocomplete-qunit.js
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/util/AjaxRendererUtils.java
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/html/AjaxOutputPanelRenderer.java
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/CollapsiblePanelRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/ProgressBarBaseRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TooltipRenderer.java
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIAjaxValidator.java
Log:
https://issues.jboss.org/browse/RF-10091
Fixed wrong detection of one-arg method in 'autocompleteMethod' attribute
Updated autocomplete-qunit.js
Deleted: trunk/core/api/src/main/java/org/ajax4jsf/context/AjaxContext.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/context/AjaxContext.java 2010-12-27 18:59:46
UTC (rev 20814)
+++ trunk/core/api/src/main/java/org/ajax4jsf/context/AjaxContext.java 2010-12-27 19:16:45
UTC (rev 20815)
@@ -1,223 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-
-package org.ajax4jsf.context;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-import org.ajax4jsf.resource.util.URLToStreamHelper;
-
-public abstract class AjaxContext {
-
- /**
- * Key for keep request state information in request-scope attributes.
- */
- public static final String AJAX_CONTEXT_KEY = "ajaxContext";
- static final String SERVICE_RESOURCE = "META-INF/services/" +
AjaxContext.class.getName();
- private static final String DEFAULT_CONTEXT_CLASS =
"org.ajax4jsf.context.AjaxContextImpl";
- private static Map<ClassLoader, Class<? extends AjaxContext>>
ajaxContextClasses =
- new HashMap<ClassLoader, Class<? extends AjaxContext>>();
- private boolean limitRender;
-
- protected AjaxContext() { }
-
- public abstract Map<String, Object> getCommonAjaxParameters();
-
- public abstract String getAjaxActionURL(FacesContext context);
-
- public abstract void setResponseData(Object responseData);
-
- public abstract Object getResponseData();
-
- public abstract void setOncomplete(Object oncompleteFunction);
-
- public abstract void appendOncomplete(Object oncompleteFunction);
-
- public abstract Object getOncomplete();
-
- public abstract void setOnbeforedomupdate(Object onbeforedomupdateFunction);
-
- public abstract Object getOnbeforedomupdate();
-
- public abstract boolean removeRenderedArea(String id);
-
- public abstract void addRenderedArea(String id);
-
- public abstract Set<String> getAjaxRenderedAreas();
-
- public abstract void addRegionsFromComponent(UIComponent component);
-
- /**
- * @param component
- * @since 3.3.0
- */
- public abstract void addAreasToProcessFromComponent(FacesContext context, UIComponent
component);
-
- public abstract Set<String> getAjaxAreasToRender();
-
- public abstract Set<String> getAjaxAreasToProcess();
-
- public boolean isAjaxRequest(FacesContext facesContext) {
- return isAjaxRequest();
- }
-
- public abstract boolean isAjaxRequest();
-
- public abstract void encodeAjaxEnd(FacesContext context) throws IOException;
-
- public abstract void encodeAjaxBegin(FacesContext context) throws IOException;
-
- public abstract void renderAjax(FacesContext context);
-
- public abstract void release();
-
- public abstract Map<String, Object> getResponseComponentDataMap();
-
- public abstract void setAjaxRequest(boolean b);
-
- public abstract boolean isSelfRender();
-
- public abstract void setSelfRender(boolean b);
-
- public abstract String getSubmittedRegionClientId();
-
- public abstract void saveViewState(FacesContext context) throws IOException;
-
- public abstract void setAjaxSingleClientId(String ajaxSingleClientId);
-
- public abstract String getAjaxSingleClientId();
-
- public abstract void setAjaxAreasToProcess(Set<String> ajaxAreasToProcess);
-
- public abstract void setSubmittedRegionClientId(String submittedClientId);
-
- public boolean isLimitRender() {
- return limitRender;
- }
-
- public void setLimitRender(boolean limitRender) {
- this.limitRender = limitRender;
- }
-
- /**
- * Get instance of current AJAX Context. Instance get by
- * variable {@link AjaxContext#AJAX_CONTEXT_KEY}
- *
- * @return memento instance for current request
- */
- public static AjaxContext getCurrentInstance() {
- FacesContext context = FacesContext.getCurrentInstance();
-
- return getCurrentInstance(context);
- }
-
- /**
- * Get instance of current AJAX Context. Instance get by
- * variable {@link AjaxContext#AJAX_CONTEXT_KEY}
- *
- * @param context
- * current FacesContext
- * @return instance of AjaxContext.
- */
- public static AjaxContext getCurrentInstance(FacesContext context) {
- if (null == context) {
- throw new NullPointerException("FacesContext is null");
- }
-
- Map<String, Object> requestMap =
context.getExternalContext().getRequestMap();
- AjaxContext ajaxContext = (AjaxContext) requestMap.get(AJAX_CONTEXT_KEY);
-
- if (null == ajaxContext) {
- ClassLoader contextClassLoader =
Thread.currentThread().getContextClassLoader();
-
- if (null == contextClassLoader) {
- contextClassLoader = AjaxContext.class.getClassLoader();
- }
-
- Class<? extends AjaxContext> clazz;
-
- synchronized (ajaxContextClasses) {
- clazz = ajaxContextClasses.get(contextClassLoader);
-
- if (null == clazz) {
- String factoryClassName = DEFAULT_CONTEXT_CLASS;
-
- // Pluggable factories.
- InputStream input = null; //
loader.getResourceAsStream(SERVICE_RESOURCE);
-
- input =
URLToStreamHelper.urlToStreamSafe(contextClassLoader.getResource(SERVICE_RESOURCE));
-
- // have services file.
- if (input != null) {
- try {
- BufferedReader reader = new BufferedReader(new
InputStreamReader(input));
-
- factoryClassName = reader.readLine();
- } catch (Exception e) {
- throw new FacesException("Error to create AjaxContext
Instance", e);
- } finally {
- try {
- input.close();
- } catch (IOException e) {
-
- // Ignore
- }
- }
- }
-
- try {
- clazz = Class.forName(factoryClassName, false,
-
contextClassLoader).asSubclass(AjaxContext.class);
- } catch (ClassNotFoundException e) {
- throw new FacesException("AjaxContext implementation class
" + factoryClassName
- + " not found ", e);
- }
-
- ajaxContextClasses.put(contextClassLoader, clazz);
- }
- }
-
- try {
- ajaxContext = clazz.newInstance();
- } catch (InstantiationException e) {
- throw new FacesException("Error to create AjaxContext
Instance", e);
- } catch (IllegalAccessException e) {
- throw new FacesException("No access to AjaxContext
constructor", e);
- }
-
- requestMap.put(AJAX_CONTEXT_KEY, ajaxContext);
- }
-
- return ajaxContext;
- }
-}
Deleted: trunk/core/api/src/main/java/org/ajax4jsf/context/package-info.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/context/package-info.java 2010-12-27
18:59:46 UTC (rev 20814)
+++ trunk/core/api/src/main/java/org/ajax4jsf/context/package-info.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -1,5 +0,0 @@
-
-/**
- * Classes and interfaces that defines contextual request information
- */
-package org.ajax4jsf.context;
Added: trunk/core/api/src/main/java/org/richfaces/context/ExtendedPartialViewContext.java
===================================================================
--- trunk/core/api/src/main/java/org/richfaces/context/ExtendedPartialViewContext.java
(rev 0)
+++
trunk/core/api/src/main/java/org/richfaces/context/ExtendedPartialViewContext.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.context;
+
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialViewContext;
+
+import com.google.common.collect.Maps;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public abstract class ExtendedPartialViewContext extends PartialViewContext {
+
+ private static final String ATTRIBUTE_NAME =
ExtendedPartialViewContext.class.getName();
+
+ private FacesContext facesContext;
+
+ private boolean limitRender = false;
+
+ private Object responseData = null;
+
+ private Map<String, Object> responseComponentDataMap = Maps.newHashMap();
+
+ private StringBuilder beforedomupdateHandler = new StringBuilder();
+
+ private StringBuilder completeHandler = new StringBuilder();
+
+ public ExtendedPartialViewContext(FacesContext facesContext) {
+ this.facesContext = facesContext;
+
+ setInstance(facesContext, this);
+ }
+
+ protected FacesContext getFacesContext() {
+ return facesContext;
+ }
+
+ private static void setInstance(FacesContext facesContext, ExtendedPartialViewContext
instance) {
+ facesContext.getAttributes().put(ATTRIBUTE_NAME, instance);
+ }
+
+ public static ExtendedPartialViewContext getInstance(FacesContext facesContext) {
+ return (ExtendedPartialViewContext)
facesContext.getAttributes().get(ATTRIBUTE_NAME);
+ }
+
+ @Override
+ public void release() {
+ setInstance(facesContext, null);
+ facesContext = null;
+ }
+
+ public Object getResponseData() {
+ return responseData;
+ }
+
+ public void setResponseData(Object responseData) {
+ this.responseData = responseData;
+ }
+
+ public void appendOncomplete(Object handler) {
+ if (handler != null) {
+ completeHandler.append(handler.toString());
+ completeHandler.append(';');
+ }
+ }
+
+ public Object getOncomplete() {
+ return completeHandler.toString();
+ }
+
+ public void appendOnbeforedomupdate(Object handler) {
+ if (handler != null) {
+ beforedomupdateHandler.append(handler.toString());
+ beforedomupdateHandler.append(';');
+ }
+ }
+
+ public Object getOnbeforedomupdate() {
+ return beforedomupdateHandler.toString();
+ }
+
+ public Map<String, Object> getResponseComponentDataMap() {
+ return responseComponentDataMap;
+ }
+
+ public boolean isLimitRender() {
+ return limitRender;
+ }
+
+ public void setLimitRender(boolean limitRender) {
+ this.limitRender = limitRender;
+ }
+
+}
Modified:
trunk/core/api/src/main/java/org/richfaces/renderkit/util/CoreAjaxRendererUtils.java
===================================================================
---
trunk/core/api/src/main/java/org/richfaces/renderkit/util/CoreAjaxRendererUtils.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/core/api/src/main/java/org/richfaces/renderkit/util/CoreAjaxRendererUtils.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -34,8 +34,8 @@
import javax.faces.context.FacesContext;
import javax.faces.context.PartialResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.richfaces.application.ServiceTracker;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.AjaxDataSerializer;
import org.richfaces.renderkit.HtmlConstants;
@@ -109,14 +109,14 @@
}
public static void renderAjaxExtensions(FacesContext facesContext, UIComponent
component) throws IOException {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(facesContext);
+ ExtendedPartialViewContext partialContext =
ExtendedPartialViewContext.getInstance(facesContext);
Map<String, String> attributes =
Collections.singletonMap(HtmlConstants.ID_ATTRIBUTE,
facesContext.getExternalContext().encodeNamespace(EXTENSION_ID));
PartialResponseWriter writer =
facesContext.getPartialViewContext().getPartialResponseWriter();
boolean[] writingState = new boolean[]{false};
- Object onbeforedomupdate = ajaxContext.getOnbeforedomupdate();
+ Object onbeforedomupdate = partialContext.getOnbeforedomupdate();
if (onbeforedomupdate != null) {
String string = onbeforedomupdate.toString();
if (string.length() != 0) {
@@ -127,7 +127,7 @@
}
}
- Object oncomplete = ajaxContext.getOncomplete();
+ Object oncomplete = partialContext.getOncomplete();
if (oncomplete != null) {
String string = oncomplete.toString();
if (string.length() != 0) {
@@ -138,7 +138,7 @@
}
}
- Object responseData = ajaxContext.getResponseData();
+ Object responseData = partialContext.getResponseData();
if (responseData != null) {
startExtensionElementIfNecessary(writer, attributes, writingState);
writer.startElement(DATA_ELEMENT_NAME, component);
@@ -149,7 +149,7 @@
writer.endElement(DATA_ELEMENT_NAME);
}
- Map<String, Object> responseComponentDataMap =
ajaxContext.getResponseComponentDataMap();
+ Map<String, Object> responseComponentDataMap =
partialContext.getResponseComponentDataMap();
if (responseComponentDataMap != null &&
!responseComponentDataMap.isEmpty()) {
startExtensionElementIfNecessary(writer, attributes, writingState);
writer.startElement(COMPONENT_DATA_ELEMENT_NAME, component);
Deleted: trunk/core/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java
===================================================================
--- trunk/core/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java 2010-12-27
18:59:46 UTC (rev 20814)
+++ trunk/core/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -1,520 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.ajax4jsf.context;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.FacesException;
-import javax.faces.FactoryFinder;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.ajax4jsf.Messages;
-import org.richfaces.log.Logger;
-import org.richfaces.log.RichfacesLogger;
-import org.richfaces.renderkit.HtmlConstants;
-import org.richfaces.renderkit.util.CoreAjaxRendererUtils;
-import org.richfaces.renderkit.util.CoreRendererUtils;
-
-/**
- * This class incapsulated
- *
- * @author asmirnov(a)exadel.com (latest modification by $Author: alexsmirnov $)
- * @version $Revision: 1.1.2.7 $ $Date: 2007/02/08 19:07:16 $
- */
-public class AjaxContextImpl extends AjaxContext {
- public static final String SERVLET_ERROR_EXCEPTION_ATTRIBUTE =
"javax.servlet.error.exception";
-
- //TODO remove this
- private static final String SERIALIZED_STATE_KEY =
"org.ajax4jsf.view.serializedstate";
-
- private static final Logger LOG = RichfacesLogger.CONTEXT.getLogger();
- Set<String> ajaxAreasToProcess = null;
- Set<String> ajaxAreasToRender = new LinkedHashSet<String>();
- Set<String> ajaxRenderedAreas = new LinkedHashSet<String>();
- boolean ajaxRequest = false;
- String ajaxSingleClientId = null;
- Object oncomplete = null;
- Object onbeforedomupdate = null;
- boolean selfRender = false;
- String submittedRegionClientId = null;
- Integer viewSequence = new Integer(1);
- Map<String, Object> responseComponentDataMap = new HashMap<String,
Object>();
- Map<String, Object> commonAjaxParameters = new HashMap<String,
Object>();
- Object responseData = null;
-
- public void release() {
- ajaxAreasToRender = new LinkedHashSet<String>();
- ajaxAreasToProcess = null;
- ajaxRenderedAreas = new LinkedHashSet<String>();
- ajaxRequest = false;
- selfRender = false;
- viewSequence = new Integer(1);
- submittedRegionClientId = null;
- responseComponentDataMap = new HashMap<String, Object>();
- commonAjaxParameters = new HashMap<String, Object>();
- responseData = null;
- }
-
- /**
- * @param context
- * @throws javax.faces.event.AbortProcessingException
- *
- */
- public void renderAjax(FacesContext context) throws FacesException {
- if (LOG.isDebugEnabled()) {
- LOG.debug(Messages.getMessage(Messages.RENDER_AJAX_REQUEST,
getSubmittedRegionClientId()));
- }
-
- try {
-
- // Just in case...
- setSelfRender(true);
- setAjaxRequest(true);
-
- // create response writer.
- ExternalContext extContext = context.getExternalContext();
- RenderKit renderKit = context.getRenderKit();
- String encoding;
-
- // Depends if we talk about servlets, portlets, ...
- if (extContext.getRequest() instanceof ServletRequest) {
- ServletRequest request = (ServletRequest) extContext.getRequest();
- ServletResponse response = (ServletResponse) extContext.getResponse();
-
- // Setup encoding and content type
- String contentType = "text/xml";
-
- // get the encoding - must be setup by faces context or filter.
- encoding = request.getCharacterEncoding();
-
- if (encoding == null) {
- encoding = "UTF-8";
- }
-
- response.setContentType(contentType + ";charset=" + encoding);
- } else {
- encoding = "UTF-8";
- }
-
- PrintWriter servletWriter;
-
- servletWriter = getWriter(extContext);
-
- ResponseWriter writer = renderKit.createResponseWriter(servletWriter, null,
encoding);
-
- context.setResponseWriter(writer);
-
- // make response
- writer.startDocument();
- encodeAjaxBegin(context);
- context.getViewRoot().encodeAll(context);
- saveViewState(context);
- encodeAjaxEnd(context);
- writer.endDocument();
- writer.flush();
- writer.close();
- servletWriter.close();
-
- // Save tree state.
- } catch (IOException e) {
- throw new
FacesException(Messages.getMessage(Messages.RENDERING_AJAX_REGION_ERROR,
- getSubmittedRegionClientId()), e);
- } finally {
- context.responseComplete();
-
- // component.setRendererType(defaultRenderer);
- }
- }
-
- /**
- * Encode declaration for AJAX response. Render
<html><body>
- *
- * @param context
- * @throws IOException
- */
- public void encodeAjaxBegin(FacesContext context) throws IOException {
- UIViewRoot viewRoot = context.getViewRoot();
-
- // AjaxContainer ajax = (AjaxContainer) component;
- ResponseWriter out = context.getResponseWriter();
-
- // DebugUtils.traceView("ViewRoot in AJAX Page encode begin");
- out.startElement(HtmlConstants.HTML_ELEMENT, viewRoot);
-
- Locale locale = viewRoot.getLocale();
-
- out.writeAttribute(HtmlConstants.LANG_ATTRIBUTE, locale.toString(),
"lang");
- out.startElement(HtmlConstants.BODY_ELEMENT, viewRoot);
- }
-
- /**
- * End encoding of AJAX response. Render tag with included areas and close
- * </body></html>
- *
- * @param context
- * @throws IOException
- */
- public void encodeAjaxEnd(FacesContext context) throws IOException {
-
- // AjaxContainer ajax = (AjaxContainer) component;
- ResponseWriter out = context.getResponseWriter();
-
- // DebugUtils.traceView("ViewRoot in AJAX Page encode begin");
- out.endElement(HtmlConstants.BODY_ELEMENT);
- out.endElement(HtmlConstants.HTML_ELEMENT);
- }
-
- public void saveViewState(FacesContext context) throws IOException {
- ResponseWriter writer = context.getResponseWriter();
- StateManager stateManager = context.getApplication().getStateManager();
- Object serializedView = stateManager.saveView(context);
-
- if ((null != serializedView) && (null != writer)) {
- StringWriter bufWriter = new StringWriter();
- ResponseWriter tempWriter;
-
- tempWriter = writer.cloneWithWriter(bufWriter);
- context.setResponseWriter(tempWriter);
- stateManager.writeState(context, serializedView);
- tempWriter.flush();
-
- if (bufWriter.getBuffer().length() > 0) {
- context.getExternalContext().getRequestMap().put(SERIALIZED_STATE_KEY,
- bufWriter.toString());
- }
-
- context.setResponseWriter(writer);
- }
- }
-
- protected RenderKit getRenderKit(FacesContext context) {
- RenderKit renderKit = context.getRenderKit();
-
- if (null == renderKit) {
- String renderKitId =
context.getApplication().getViewHandler().calculateRenderKitId(context);
- RenderKitFactory factory = (RenderKitFactory)
FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
-
- renderKit = factory.getRenderKit(context, renderKitId);
- }
-
- return renderKit;
- }
-
- /**
- * @return Returns the ajaxRequest.
- */
- public boolean isAjaxRequest() {
- return ajaxRequest;
- }
-
- /**
- * @param ajaxRequest The ajaxRequest to set.
- */
- public void setAjaxRequest(boolean ajaxRequest) {
- this.ajaxRequest = ajaxRequest;
- }
-
- /**
- * @return Returns the ajaxAreasToRender.
- */
- public Set<String> getAjaxAreasToRender() {
- return this.ajaxAreasToRender;
- }
-
- /**
- * @return the ajaxAreasToProcess
- */
- @Override
- public Set<String> getAjaxAreasToProcess() {
- return ajaxAreasToProcess;
- }
-
- /**
- * @param ajaxAreasToProcess the ajaxAreasToProcess to set
- */
- @Override
- public void setAjaxAreasToProcess(Set<String> ajaxAreasToProcess) {
- this.ajaxAreasToProcess = ajaxAreasToProcess;
- }
-
- /**
- * Add affected regions's ID to ajaxView component.
- *
- * @param component
- */
- public void addRegionsFromComponent(UIComponent component) {
-
- // First step - find parent ajax view
- Set<String> ajaxRegions = CoreAjaxRendererUtils.getAjaxAreas(component);
-
- // if (ajaxRegions == null){
- // FacesContext context = FacesContext.getCurrentInstance();
- // ajaxRegions = AjaxRendererUtils.getAbsoluteId(context,component);
- // }
- if (LOG.isDebugEnabled()) {
- LOG.debug(Messages.getMessage(Messages.INVOKE_AJAX_REGION_LISTENER,
component.getId()));
- }
-
-
- if (ajaxRegions != null) {
-
ajaxAreasToRender.addAll(CoreRendererUtils.INSTANCE.findComponentsFor(FacesContext.getCurrentInstance(),
component, ajaxRegions));
- }
-
- // Is that component limit to list ?
- if (Boolean.TRUE.equals(component.getAttributes().get("limitRender")))
{
- setLimitRender(true);
- }
- }
-
- /**
- * Add IDs of regions to process
- *
- * @see
org.ajax4jsf.context.AjaxContext#addAreasToProcessFromComponent(javax.faces.component.UIComponent)
- */
- @Override
- public void addAreasToProcessFromComponent(FacesContext context, UIComponent
component) {
- Set<String> areasToProcess =
CoreAjaxRendererUtils.getAjaxAreasToProcess(component);
-
- if (areasToProcess != null) {
- Collection<String> convertedAreaIds =
CoreRendererUtils.INSTANCE.findComponentsFor(context, component, areasToProcess);
-
- if (this.ajaxAreasToProcess == null) {
- this.ajaxAreasToProcess = new HashSet<String>(convertedAreaIds);
- } else {
- this.ajaxAreasToProcess.addAll(convertedAreaIds);
- }
- }
- }
-
- /**
- * @return Returns the ajaxRenderedAreas.
- */
- public Set<String> getAjaxRenderedAreas() {
- return ajaxRenderedAreas;
- }
-
- public void addRenderedArea(String id) {
- ajaxRenderedAreas.add(id);
- }
-
- public boolean removeRenderedArea(String id) {
- return ajaxRenderedAreas.remove(id);
- }
-
- /**
- * @return Returns the submittedClientId.
- */
- public String getSubmittedRegionClientId() {
- return this.submittedRegionClientId;
- }
-
- /**
- * @param submittedClientId The submittedClientId to set.
- */
- @Override
- public void setSubmittedRegionClientId(String submittedClientId) {
- this.submittedRegionClientId = submittedClientId;
- }
-
- /**
- * @return the ajaxSingleClientId
- */
- @Override
- public String getAjaxSingleClientId() {
- return ajaxSingleClientId;
- }
-
- /**
- * @param ajaxSingleClientId the ajaxSingleClientId to set
- */
- @Override
- public void setAjaxSingleClientId(String ajaxSingleClientId) {
- this.ajaxSingleClientId = ajaxSingleClientId;
- }
-
- /**
- * @return Returns the selfRender.
- */
- public boolean isSelfRender() {
- return selfRender;
- }
-
- /**
- * @param selfRender The selfRender to set.
- */
- public void setSelfRender(boolean selfRender) {
- this.selfRender = selfRender;
- }
-
- /**
- * @return the responseData
- */
- public Object getResponseData() {
- return responseData;
- }
-
- /**
- * @param responseData the responseData to set
- */
- public void setResponseData(Object responseData) {
- this.responseData = responseData;
- }
-
- /**
- * @return the responseDataMap
- */
- public Map<String, Object> getResponseComponentDataMap() {
- return responseComponentDataMap;
- }
-
- /**
- * Gives back the writer of a Response object.
- *
- * @param extContext The external context.
- * @return The writer of the response.
- * @throws FacesException If the response object has no getWriter() method.
- */
- protected PrintWriter getWriter(ExternalContext extContext) throws FacesException {
- PrintWriter writer = null;
- Object response = extContext.getResponse();
-
- try {
- Method gW = response.getClass().getMethod("getWriter", new
Class[0]);
-
- writer = (PrintWriter) gW.invoke(response, new Object[0]);
- } catch (Exception e) {
- throw new FacesException(e);
- }
-
- return writer;
- }
-
- public String getAjaxActionURL(FacesContext context) {
-
- // Check arguments
- if (null == context) {
- throw new NullPointerException("Faces context for build AJAX Action URL
is null");
- }
-
- UIViewRoot viewRoot = context.getViewRoot();
-
- if (null == viewRoot) {
- throw new NullPointerException("Faces view tree for build AJAX Action
URL is null");
- }
-
- String viewId = viewRoot.getViewId();
-
- if (null == viewId) {
- throw new NullPointerException("View id for build AJAX Action URL is
null");
- }
-
- if (!viewId.startsWith("/")) {
- throw new IllegalArgumentException("Illegal view Id for build AJAX
Action URL: " + viewId);
- }
-
- ViewHandler viewHandler = context.getApplication().getViewHandler();
- String actionURL = viewHandler.getActionURL(context, viewId);
-
- // HACK - check for a Jboss PortletBridge implementation. If present, append
DirectLink attribute to url.
- // TODO - how to detect portlet application ?
- if (null != context.getExternalContext().getApplicationMap().get(
- "org.jboss.portletbridge.application.PortletStateHolder")) {
-
- // Mark Ajax action url as transparent with jsf-portlet bridge.
- actionURL = actionURL + ((actionURL.lastIndexOf('?') > 0) ?
"&" : "?")
- + "javax.portlet.faces.DirectLink=true";
- }
-
- return context.getExternalContext().encodeActionURL(actionURL);
- }
-
- /**
- * @return the commonAjaxParameters
- */
- public Map<String, Object> getCommonAjaxParameters() {
- return commonAjaxParameters;
- }
-
- /**
- * @return the oncomplete
- */
- public Object getOncomplete() {
- return oncomplete;
- }
-
- /**
- * @param oncomplete the oncomplete to set
- */
- public void setOncomplete(Object oncomplete) {
- this.oncomplete = oncomplete;
- }
-
- public void appendOncomplete(Object onComplete) {
- StringBuilder res = new StringBuilder();
- if (this.oncomplete != null) {
- res.append(this.oncomplete);
- res.append(';');
- }
-
- if (onComplete != null) {
- res.append(onComplete).append(';');
- }
-
- this.oncomplete = res.toString();
- }
-
- /* (non-Javadoc)
- * @see org.ajax4jsf.context.AjaxContext#getOnbeforedomupdate()
- */
- @Override
- public Object getOnbeforedomupdate() {
- return onbeforedomupdate;
- }
-
- /* (non-Javadoc)
- * @see org.ajax4jsf.context.AjaxContext#setOnbeforedomupdate(java.lang.Object)
- */
- @Override
- public void setOnbeforedomupdate(Object onbeforedomupdateFunction) {
- this.onbeforedomupdate = onbeforedomupdateFunction;
- }
-}
Copied:
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextFactoryImpl.java
(from rev 20790,
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextFactoryImpl.java)
===================================================================
---
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextFactoryImpl.java
(rev 0)
+++
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextFactoryImpl.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -0,0 +1,50 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.context;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialViewContext;
+import javax.faces.context.PartialViewContextFactory;
+
+/**
+ * @author Nick Belaevski
+ * @since 4.0
+ */
+public class ExtendedPartialViewContextFactoryImpl extends PartialViewContextFactory {
+
+ private PartialViewContextFactory parentFactory;
+
+ public ExtendedPartialViewContextFactoryImpl(PartialViewContextFactory parentFactory)
{
+ super();
+ this.parentFactory = parentFactory;
+ }
+
+ @Override
+ public PartialViewContext getPartialViewContext(final FacesContext context) {
+ return new
ExtendedPartialViewContextImpl(parentFactory.getPartialViewContext(context), context);
+ }
+
+ @Override
+ public PartialViewContextFactory getWrapped() {
+ return parentFactory;
+ }
+}
Copied:
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextImpl.java
(from rev 20790,
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java)
===================================================================
---
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextImpl.java
(rev 0)
+++
trunk/core/impl/src/main/java/org/richfaces/context/ExtendedPartialViewContextImpl.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -0,0 +1,534 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.context;
+
+import static org.richfaces.renderkit.AjaxConstants.AJAX_COMPONENT_ID_PARAMETER;
+import static org.richfaces.renderkit.AjaxConstants.ALL;
+import static org.richfaces.renderkit.AjaxConstants.BEHAVIOR_EVENT_PARAMETER;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.context.PartialViewContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.PhaseId;
+
+import org.ajax4jsf.javascript.ScriptUtils;
+import org.richfaces.application.ServiceTracker;
+import org.richfaces.component.MetaComponentEncoder;
+import org.richfaces.javascript.JavaScriptService;
+import org.richfaces.javascript.ScriptsHolder;
+import org.richfaces.log.Logger;
+import org.richfaces.log.RichfacesLogger;
+import org.richfaces.renderkit.util.CoreAjaxRendererUtils;
+
+/**
+ * @author Nick Belaevski
+ * @since 4.0
+ */
+public class ExtendedPartialViewContextImpl extends ExtendedPartialViewContext {
+
+ private static final Logger LOG = RichfacesLogger.CONTEXT.getLogger();
+
+ private static final String ORIGINAL_WRITER =
"org.richfaces.PartialViewContextImpl.ORIGINAL_WRITER";
+
+ private enum ContextMode {
+ WRAPPED, DIRECT
+ }
+
+ private ContextMode contextMode = null;
+
+ private Collection<String> executeIds = null;
+
+ private Collection<String> renderIds = null;
+
+ private Collection<String> componentRenderIds = null;
+
+ private Boolean renderAll = null;
+
+ private String activatorComponentId = null;
+ private String behaviorEvent = null;
+
+ private boolean released = false;
+
+ private boolean limitRender = false;
+
+ private PartialViewContext wrappedViewContext;
+
+ private String onbeforedomupdate;
+
+ private String oncomplete;
+
+ private Object responseData;
+
+ public ExtendedPartialViewContextImpl(PartialViewContext wrappedViewContext,
FacesContext facesContext) {
+ super(facesContext);
+
+ this.wrappedViewContext = wrappedViewContext;
+ }
+
+ @Override
+ public Collection<String> getExecuteIds() {
+ assertNotReleased();
+
+ if (detectContextMode() == ContextMode.DIRECT) {
+ if (executeIds == null) {
+ executeIds = new LinkedHashSet<String>();
+ visitActivatorAtExecute();
+ }
+
+ return executeIds;
+ } else {
+ return wrappedViewContext.getExecuteIds();
+ }
+ }
+
+ @Override
+ public Collection<String> getRenderIds() {
+ assertNotReleased();
+
+ if (detectContextMode() == ContextMode.DIRECT) {
+ if (renderIds == null) {
+ renderIds = new LinkedHashSet<String>();
+ }
+
+ return renderIds;
+ } else {
+ return wrappedViewContext.getRenderIds();
+ }
+ }
+
+ @Override
+ public boolean isAjaxRequest() {
+ assertNotReleased();
+
+ return wrappedViewContext.isAjaxRequest();
+ }
+
+ @Override
+ public boolean isPartialRequest() {
+ assertNotReleased();
+
+ return wrappedViewContext.isPartialRequest();
+ }
+
+ @Override
+ public void setPartialRequest(boolean isPartialRequest) {
+ assertNotReleased();
+
+ wrappedViewContext.setPartialRequest(isPartialRequest);
+ }
+
+ @Override
+ public boolean isExecuteAll() {
+ assertNotReleased();
+
+ if (detectContextMode() == ContextMode.DIRECT) {
+ return getExecuteIds().contains(ALL);
+ } else {
+ return wrappedViewContext.isExecuteAll();
+ }
+ }
+
+ @Override
+ public boolean isRenderAll() {
+ assertNotReleased();
+
+ if (detectContextMode() == ContextMode.DIRECT) {
+ if (renderAll != null) {
+ return renderAll.booleanValue();
+ }
+
+ return getRenderIds().contains(ALL);
+ } else {
+ return wrappedViewContext.isRenderAll();
+ }
+ }
+
+ @Override
+ public void setRenderAll(boolean isRenderAll) {
+ assertNotReleased();
+
+ if (detectContextMode() == ContextMode.DIRECT) {
+ renderAll = isRenderAll;
+ } else {
+ wrappedViewContext.setRenderAll(isRenderAll);
+ }
+ }
+
+ @Override
+ public PartialResponseWriter getPartialResponseWriter() {
+ return wrappedViewContext.getPartialResponseWriter();
+ }
+
+ private boolean isProcessedExecutePhase(PhaseId phaseId) {
+ return phaseId == PhaseId.APPLY_REQUEST_VALUES || phaseId ==
PhaseId.PROCESS_VALIDATIONS
+ || phaseId == PhaseId.UPDATE_MODEL_VALUES;
+ }
+
+ @Override
+ public void processPartial(PhaseId phaseId) {
+ if (detectContextMode() == ContextMode.DIRECT) {
+ if (phaseId == PhaseId.RENDER_RESPONSE) {
+ processPartialRenderPhase();
+ } else if (isProcessedExecutePhase(phaseId)) {
+ processPartialExecutePhase(phaseId);
+ }
+ } else {
+ wrappedViewContext.processPartial(phaseId);
+ }
+ }
+
+ protected void processPartialExecutePhase(PhaseId phaseId) {
+ FacesContext facesContext = getFacesContext();
+ PartialViewContext pvc = facesContext.getPartialViewContext();
+ Collection <String> executeIds = pvc.getExecuteIds();
+
+ if (executeIds == null || executeIds.isEmpty()) {
+ if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+ LOG.warn("Partial execute won't happen - executeIds were not
specified");
+ }
+ return;
+ }
+
+ try {
+ executeComponents(phaseId, executeIds);
+ } catch (Exception e) {
+ LOG.error(e.getMessage(), e);
+ }
+
+ if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
+ //fix for MyFaces
+ ExternalContext externalContext = facesContext.getExternalContext();
+
externalContext.setResponseCharacterEncoding(externalContext.getRequestCharacterEncoding());
+
+ PartialResponseWriter writer = pvc.getPartialResponseWriter();
+ facesContext.setResponseWriter(writer);
+ }
+ }
+
+ protected void executeComponents(PhaseId phaseId, Collection<String>
executeIds) {
+ FacesContext facesContext = getFacesContext();
+ EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED);
+ VisitContext visitContext = new ExecuteExtendedVisitContext(facesContext,
executeIds, hints);
+ PartialViewExecuteVisitCallback callback = new
PartialViewExecuteVisitCallback(facesContext, phaseId);
+ facesContext.getViewRoot().visitTree(visitContext, callback);
+ }
+
+ protected void processPartialRenderPhase() {
+ FacesContext facesContext = getFacesContext();
+ PartialViewContext pvc = facesContext.getPartialViewContext();
+ UIViewRoot viewRoot = facesContext.getViewRoot();
+ Collection<String> phaseIds = pvc.getRenderIds();
+ visitActivatorAtRender(phaseIds);
+
+ try {
+ PartialResponseWriter writer = pvc.getPartialResponseWriter();
+ ResponseWriter orig = facesContext.getResponseWriter();
+ facesContext.getAttributes().put(ORIGINAL_WRITER, orig);
+ facesContext.setResponseWriter(writer);
+
+ ExternalContext exContext = facesContext.getExternalContext();
+ exContext.setResponseContentType("text/xml");
+ exContext.addResponseHeader("Cache-Control",
"no-cache");
+ writer.startDocument();
+ if (isRenderAll()) {
+ renderAll(facesContext, viewRoot);
+ renderState(facesContext);
+ writer.endDocument();
+ return;
+ }
+
+ // Skip this processing if "none" is specified in the render list,
+ // or there were no render phase client ids.
+ if ((phaseIds != null && !phaseIds.isEmpty()) ||
+ (!limitRender &&
PartialViewContextAjaxOutputTracker.hasNestedAjaxOutputs(viewRoot))) {
+
+ EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED);
+ VisitContext visitContext = new RenderExtendedVisitContext(facesContext,
phaseIds, hints, limitRender);
+ VisitCallback visitCallback = new RenderVisitCallback(facesContext);
+ viewRoot.visitTree(visitContext, visitCallback);
+ }
+
+ renderState(facesContext);
+
+ //TODO - render extensions for renderAll?
+ renderExtensions(facesContext, viewRoot);
+
+ writer.endDocument();
+ } catch (IOException ex) {
+ this.cleanupAfterView();
+ //TODO - review?
+ ex.printStackTrace();
+ } catch (RuntimeException ex) {
+ //TODO - review?
+ this.cleanupAfterView();
+ // Throw the exception
+ throw ex;
+ }
+ }
+
+ private void setupExecuteCallbackData(ExecuteComponentCallback callback) {
+ executeIds.addAll(callback.getExecuteIds());
+
+ setupRenderCallbackData(callback);
+ }
+
+ private void setupRenderCallbackData(RenderComponentCallback callback) {
+ componentRenderIds = callback.getRenderIds();
+ onbeforedomupdate = callback.getOnbeforedomupdate();
+ oncomplete = callback.getOncomplete();
+ responseData = callback.getData();
+ limitRender = callback.isLimitRender();
+ }
+
+ private void visitActivatorAtExecute() {
+ ExecuteComponentCallback callback = new
ExecuteComponentCallback(getFacesContext(), behaviorEvent);
+
+ if (visitActivatorComponent(activatorComponentId, callback,
EnumSet.of(VisitHint.SKIP_UNRENDERED))) {
+ setupExecuteCallbackData(callback);
+
+ if (!executeIds.contains(ALL)) {
+ addImplicitExecuteIds(executeIds);
+ }
+ } else {
+ //TODO - log or exception?
+ //TODO - process default execute value
+ }
+ }
+
+ private void visitActivatorAtRender(Collection<String> ids) {
+ if (!isRenderAll()) {
+ RenderComponentCallback callback = new
RenderComponentCallback(getFacesContext(), behaviorEvent);
+
+ if (visitActivatorComponent(activatorComponentId, callback,
EnumSet.noneOf(VisitHint.class))) {
+ setupRenderCallbackData(callback);
+ } else {
+ //TODO - the same as for "execute"
+ }
+
+ //take collection value stored during execute
+ if (componentRenderIds != null) {
+ ids.addAll(componentRenderIds);
+ }
+
+ if (!Boolean.TRUE.equals(renderAll) && !ids.contains(ALL)) {
+ addImplicitRenderIds(ids, limitRender);
+
+ appendOnbeforedomupdate(onbeforedomupdate);
+ appendOncomplete(oncomplete);
+ setResponseData(responseData);
+ }
+ }
+ }
+
+ private void renderAll(FacesContext context, UIViewRoot viewRoot) throws IOException
{
+ // If this is a "render all via ajax" request,
+ // make sure to wrap the entire page in a <render> elemnt
+ // with the special id of VIEW_ROOT_ID. This is how the client
+ // JavaScript knows how to replace the entire document with
+ // this response.
+ PartialViewContext pvc = context.getPartialViewContext();
+ PartialResponseWriter writer = pvc.getPartialResponseWriter();
+ writer.startUpdate(PartialResponseWriter.RENDER_ALL_MARKER);
+
+ if (viewRoot.getChildCount() > 0) {
+ for (UIComponent child : viewRoot.getChildren()) {
+ child.encodeAll(context);
+ }
+ }
+
+ writer.endUpdate();
+ }
+
+ private void renderState(FacesContext context) throws IOException {
+ if (!context.getViewRoot().isTransient()) {
+ // Get the view state and write it to the response..
+ PartialViewContext pvc = context.getPartialViewContext();
+ PartialResponseWriter writer = pvc.getPartialResponseWriter();
+ writer.startUpdate(PartialResponseWriter.VIEW_STATE_MARKER);
+ String state =
context.getApplication().getStateManager().getViewState(context);
+ writer.write(state);
+ writer.endUpdate();
+ }
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ assertNotReleased();
+
+ released = true;
+
+ wrappedViewContext.release();
+ wrappedViewContext = null;
+
+ renderAll = null;
+ executeIds = null;
+ renderIds = null;
+
+ limitRender = false;
+
+ activatorComponentId = null;
+ behaviorEvent = null;
+ contextMode = null;
+ }
+
+ protected void addImplicitExecuteIds(Collection<String> ids) {
+ if (!ids.isEmpty()) {
+ UIViewRoot root = getFacesContext().getViewRoot();
+ if (root.getFacetCount() > 0) {
+ if (root.getFacet(UIViewRoot.METADATA_FACET_NAME) != null) {
+ //TODO nick - does ordering matter?
+ ids.add(UIViewRoot.METADATA_FACET_NAME);
+ //ids.add(0, UIViewRoot.METADATA_FACET_NAME);
+ }
+ }
+ }
+ }
+
+ protected void addImplicitRenderIds(Collection<String> ids, boolean
limitRender) {
+ }
+
+ protected void renderExtensions(FacesContext context, UIComponent component) throws
IOException {
+ // ADD deffered scripts
+ ScriptsHolder scriptsHolder =
ServiceTracker.getService(JavaScriptService.class).getScriptsHolder(context);
+ for (Object script : scriptsHolder.getScripts()) {
+ appendOncomplete(ScriptUtils.toScript(script));
+ }
+ for (Object script : scriptsHolder.getPageReadyScripts()) {
+ appendOncomplete(ScriptUtils.toScript(script));
+ }
+ CoreAjaxRendererUtils.renderAjaxExtensions(context, component);
+ }
+
+ private void assertNotReleased() {
+ if (released) {
+ throw new IllegalStateException("PartialViewContext already
released!");
+ }
+ }
+
+ private boolean visitActivatorComponent(String componentActivatorId, VisitCallback
visitCallback, Set<VisitHint> visitHints) {
+ FacesContext facesContext = getFacesContext();
+
+ Set<String> idsToVisit = Collections.singleton(componentActivatorId);
+ VisitContext visitContext = new ExecuteExtendedVisitContext(facesContext,
idsToVisit, visitHints);
+
+ boolean visitResult = facesContext.getViewRoot().visitTree(visitContext,
visitCallback);
+ return visitResult;
+ }
+
+ private void cleanupAfterView() {
+ FacesContext facesContext = getFacesContext();
+
+ ResponseWriter orig = (ResponseWriter)
facesContext.getAttributes().get(ORIGINAL_WRITER);
+ assert null != orig;
+ // move aside the PartialResponseWriter
+ facesContext.setResponseWriter(orig);
+ }
+
+ protected ContextMode detectContextMode() {
+ if (contextMode == null) {
+ Map<String, String> requestParameterMap =
getFacesContext().getExternalContext().getRequestParameterMap();
+ activatorComponentId = requestParameterMap.get(AJAX_COMPONENT_ID_PARAMETER);
+
+ if (activatorComponentId != null) {
+ contextMode = ContextMode.DIRECT;
+ behaviorEvent = requestParameterMap.get(BEHAVIOR_EVENT_PARAMETER);
+ } else {
+ contextMode = ContextMode.WRAPPED;
+ }
+ }
+
+ return contextMode;
+ }
+
+ private static final class RenderVisitCallback implements VisitCallback {
+
+ private FacesContext ctx;
+
+ private RenderVisitCallback(FacesContext ctx) {
+ this.ctx = ctx;
+ }
+
+ private void logException(Exception e) {
+ if (LOG.isErrorEnabled()) {
+ LOG.error(e.getMessage());
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(e.getMessage(), e);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see
javax.faces.component.visit.VisitCallback#visit(javax.faces.component.visit.VisitContext,
javax.faces.component.UIComponent)
+ */
+ public VisitResult visit(VisitContext context, UIComponent target) {
+ String metaComponentId = (String)
ctx.getAttributes().get(ExtendedVisitContext.META_COMPONENT_ID);
+ if (metaComponentId != null) {
+ MetaComponentEncoder encoder = (MetaComponentEncoder) target;
+ try {
+ encoder.encodeMetaComponent(ctx, metaComponentId);
+ } catch (Exception e) {
+ logException(e);
+ }
+ } else {
+ PartialResponseWriter writer =
ctx.getPartialViewContext().getPartialResponseWriter();
+
+ try {
+ writer.startUpdate(target.getClientId(ctx));
+ try {
+ // do the default behavior...
+ target.encodeAll(ctx);
+ } catch (Exception ce) {
+ logException(ce);
+ }
+
+ writer.endUpdate();
+ } catch (IOException e) {
+ logException(e);
+ }
+ }
+
+ // Once we visit a component, there is no need to visit
+ // its children, since processDecodes/Validators/Updates and
+ // encodeAll() already traverse the subtree. We return
+ // VisitResult.REJECT to supress the subtree visit.
+ return VisitResult.REJECT;
+ }
+ }
+}
Deleted:
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextFactoryImpl.java
===================================================================
---
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextFactoryImpl.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextFactoryImpl.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -1,50 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.richfaces.context;
-
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialViewContext;
-import javax.faces.context.PartialViewContextFactory;
-
-/**
- * @author Nick Belaevski
- * @since 4.0
- */
-public class PartialViewContextFactoryImpl extends PartialViewContextFactory {
-
- private PartialViewContextFactory parentFactory;
-
- public PartialViewContextFactoryImpl(PartialViewContextFactory parentFactory) {
- super();
- this.parentFactory = parentFactory;
- }
-
- @Override
- public PartialViewContext getPartialViewContext(final FacesContext context) {
- return new PartialViewContextImpl(parentFactory.getPartialViewContext(context),
context);
- }
-
- @Override
- public PartialViewContextFactory getWrapped() {
- return parentFactory;
- }
-}
Deleted: trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java
===================================================================
---
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/core/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -1,540 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2009, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.richfaces.context;
-
-import static org.richfaces.renderkit.AjaxConstants.AJAX_COMPONENT_ID_PARAMETER;
-import static org.richfaces.renderkit.AjaxConstants.ALL;
-import static org.richfaces.renderkit.AjaxConstants.BEHAVIOR_EVENT_PARAMETER;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitHint;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.context.PartialViewContext;
-import javax.faces.context.ResponseWriter;
-import javax.faces.event.PhaseId;
-
-import org.ajax4jsf.context.AjaxContext;
-import org.ajax4jsf.javascript.ScriptUtils;
-import org.richfaces.application.ServiceTracker;
-import org.richfaces.component.MetaComponentEncoder;
-import org.richfaces.javascript.JavaScriptService;
-import org.richfaces.javascript.ScriptsHolder;
-import org.richfaces.log.Logger;
-import org.richfaces.log.RichfacesLogger;
-import org.richfaces.renderkit.util.CoreAjaxRendererUtils;
-
-/**
- * @author Nick Belaevski
- * @since 4.0
- */
-public class PartialViewContextImpl extends PartialViewContext {
-
- private static final Logger LOG = RichfacesLogger.CONTEXT.getLogger();
-
- private static final String ORIGINAL_WRITER =
"org.richfaces.PartialViewContextImpl.ORIGINAL_WRITER";
-
- private enum ContextMode {
- WRAPPED, DIRECT
- }
-
- private ContextMode contextMode = null;
-
- private FacesContext facesContext;
-
- private Collection<String> executeIds = null;
-
- private Collection<String> renderIds = null;
-
- private Collection<String> componentRenderIds = null;
-
- private Boolean renderAll = null;
-
- private String activatorComponentId = null;
- private String behaviorEvent = null;
-
- private boolean released = false;
-
- private boolean limitRender = false;
-
- private PartialViewContext wrappedViewContext;
-
- private String onbeforedomupdate;
-
- private String oncomplete;
-
- private Object responseData;
-
- public PartialViewContextImpl(PartialViewContext wrappedViewContext, FacesContext
facesContext) {
- super();
-
- this.wrappedViewContext = wrappedViewContext;
- this.facesContext = facesContext;
- }
-
- @Override
- public Collection<String> getExecuteIds() {
- assertNotReleased();
-
- if (detectContextMode() == ContextMode.DIRECT) {
- if (executeIds == null) {
- executeIds = new LinkedHashSet<String>();
- visitActivatorAtExecute();
- }
-
- return executeIds;
- } else {
- return wrappedViewContext.getExecuteIds();
- }
- }
-
- @Override
- public Collection<String> getRenderIds() {
- assertNotReleased();
-
- if (detectContextMode() == ContextMode.DIRECT) {
- if (renderIds == null) {
- renderIds = new LinkedHashSet<String>();
- }
-
- return renderIds;
- } else {
- return wrappedViewContext.getRenderIds();
- }
- }
-
- @Override
- public boolean isAjaxRequest() {
- assertNotReleased();
-
- return wrappedViewContext.isAjaxRequest();
- }
-
- @Override
- public boolean isPartialRequest() {
- assertNotReleased();
-
- return wrappedViewContext.isPartialRequest();
- }
-
- @Override
- public void setPartialRequest(boolean isPartialRequest) {
- assertNotReleased();
-
- wrappedViewContext.setPartialRequest(isPartialRequest);
- }
-
- @Override
- public boolean isExecuteAll() {
- assertNotReleased();
-
- if (detectContextMode() == ContextMode.DIRECT) {
- return getExecuteIds().contains(ALL);
- } else {
- return wrappedViewContext.isExecuteAll();
- }
- }
-
- @Override
- public boolean isRenderAll() {
- assertNotReleased();
-
- if (detectContextMode() == ContextMode.DIRECT) {
- if (renderAll != null) {
- return renderAll.booleanValue();
- }
-
- return getRenderIds().contains(ALL);
- } else {
- return wrappedViewContext.isRenderAll();
- }
- }
-
- @Override
- public void setRenderAll(boolean isRenderAll) {
- assertNotReleased();
-
- if (detectContextMode() == ContextMode.DIRECT) {
- renderAll = isRenderAll;
- } else {
- wrappedViewContext.setRenderAll(isRenderAll);
- }
- }
-
- @Override
- public PartialResponseWriter getPartialResponseWriter() {
- return wrappedViewContext.getPartialResponseWriter();
- }
-
- private boolean isProcessedExecutePhase(PhaseId phaseId) {
- return phaseId == PhaseId.APPLY_REQUEST_VALUES || phaseId ==
PhaseId.PROCESS_VALIDATIONS
- || phaseId == PhaseId.UPDATE_MODEL_VALUES;
- }
-
- @Override
- public void processPartial(PhaseId phaseId) {
- if (detectContextMode() == ContextMode.DIRECT) {
- if (phaseId == PhaseId.RENDER_RESPONSE) {
- processPartialRenderPhase();
- } else if (isProcessedExecutePhase(phaseId)) {
- processPartialExecutePhase(phaseId);
- }
- } else {
- wrappedViewContext.processPartial(phaseId);
- }
- }
-
- protected void processPartialExecutePhase(PhaseId phaseId) {
- PartialViewContext pvc = facesContext.getPartialViewContext();
- Collection <String> executeIds = pvc.getExecuteIds();
-
- if (executeIds == null || executeIds.isEmpty()) {
- if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
- LOG.warn("Partial execute won't happen - executeIds were not
specified");
- }
- return;
- }
-
- try {
- executeComponents(phaseId, executeIds);
- } catch (Exception e) {
- LOG.error(e.getMessage(), e);
- }
-
- if (phaseId == PhaseId.APPLY_REQUEST_VALUES) {
- //fix for MyFaces
- ExternalContext externalContext = facesContext.getExternalContext();
-
externalContext.setResponseCharacterEncoding(externalContext.getRequestCharacterEncoding());
-
- PartialResponseWriter writer = pvc.getPartialResponseWriter();
- facesContext.setResponseWriter(writer);
- }
- }
-
- protected void executeComponents(PhaseId phaseId, Collection<String>
executeIds) {
- EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED);
- VisitContext visitContext = new ExecuteExtendedVisitContext(facesContext,
executeIds, hints);
- PartialViewExecuteVisitCallback callback = new
PartialViewExecuteVisitCallback(facesContext, phaseId);
- facesContext.getViewRoot().visitTree(visitContext, callback);
- }
-
- protected void processPartialRenderPhase() {
- PartialViewContext pvc = facesContext.getPartialViewContext();
- UIViewRoot viewRoot = facesContext.getViewRoot();
- Collection<String> phaseIds = pvc.getRenderIds();
- visitActivatorAtRender(phaseIds);
-
- try {
- PartialResponseWriter writer = pvc.getPartialResponseWriter();
- ResponseWriter orig = facesContext.getResponseWriter();
- facesContext.getAttributes().put(ORIGINAL_WRITER, orig);
- facesContext.setResponseWriter(writer);
-
- ExternalContext exContext = facesContext.getExternalContext();
- exContext.setResponseContentType("text/xml");
- exContext.addResponseHeader("Cache-Control",
"no-cache");
- writer.startDocument();
- if (isRenderAll()) {
- renderAll(facesContext, viewRoot);
- renderState(facesContext);
- writer.endDocument();
- return;
- }
-
- // Skip this processing if "none" is specified in the render list,
- // or there were no render phase client ids.
- if ((phaseIds != null && !phaseIds.isEmpty()) ||
- (!limitRender &&
PartialViewContextAjaxOutputTracker.hasNestedAjaxOutputs(viewRoot))) {
-
- EnumSet<VisitHint> hints = EnumSet.of(VisitHint.SKIP_UNRENDERED);
- VisitContext visitContext = new RenderExtendedVisitContext(facesContext,
phaseIds, hints, limitRender);
- VisitCallback visitCallback = new RenderVisitCallback(facesContext);
- viewRoot.visitTree(visitContext, visitCallback);
- }
-
- renderState(facesContext);
-
- //TODO - render extensions for renderAll?
- renderExtensions(facesContext, viewRoot);
-
- writer.endDocument();
- } catch (IOException ex) {
- this.cleanupAfterView();
- //TODO - review?
- ex.printStackTrace();
- } catch (RuntimeException ex) {
- //TODO - review?
- this.cleanupAfterView();
- // Throw the exception
- throw ex;
- }
- }
-
- private void setupExecuteCallbackData(ExecuteComponentCallback callback) {
- executeIds.addAll(callback.getExecuteIds());
-
- setupRenderCallbackData(callback);
- }
-
- private void setupRenderCallbackData(RenderComponentCallback callback) {
- componentRenderIds = callback.getRenderIds();
- onbeforedomupdate = callback.getOnbeforedomupdate();
- oncomplete = callback.getOncomplete();
- responseData = callback.getData();
- limitRender = callback.isLimitRender();
- }
-
- private void visitActivatorAtExecute() {
- ExecuteComponentCallback callback = new ExecuteComponentCallback(facesContext,
behaviorEvent);
-
- if (visitActivatorComponent(activatorComponentId, callback,
EnumSet.of(VisitHint.SKIP_UNRENDERED))) {
- setupExecuteCallbackData(callback);
-
- if (!executeIds.contains(ALL)) {
- addImplicitExecuteIds(executeIds);
- }
- } else {
- //TODO - log or exception?
- //TODO - process default execute value
- }
- }
-
- private void visitActivatorAtRender(Collection<String> ids) {
- if (!isRenderAll()) {
- RenderComponentCallback callback = new RenderComponentCallback(facesContext,
behaviorEvent);
-
- if (visitActivatorComponent(activatorComponentId, callback,
EnumSet.noneOf(VisitHint.class))) {
- setupRenderCallbackData(callback);
- } else {
- //TODO - the same as for "execute"
- }
-
- //take collection value stored during execute
- if (componentRenderIds != null) {
- ids.addAll(componentRenderIds);
- }
-
- if (!Boolean.TRUE.equals(renderAll) && !ids.contains(ALL)) {
- addImplicitRenderIds(ids, limitRender);
-
- //TODO - review
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance();
- ajaxContext.setOnbeforedomupdate(onbeforedomupdate);
- ajaxContext.appendOncomplete(oncomplete);
- ajaxContext.setResponseData(responseData);
- }
- }
- }
-
- private void renderAll(FacesContext context, UIViewRoot viewRoot) throws IOException
{
- // If this is a "render all via ajax" request,
- // make sure to wrap the entire page in a <render> elemnt
- // with the special id of VIEW_ROOT_ID. This is how the client
- // JavaScript knows how to replace the entire document with
- // this response.
- PartialViewContext pvc = context.getPartialViewContext();
- PartialResponseWriter writer = pvc.getPartialResponseWriter();
- writer.startUpdate(PartialResponseWriter.RENDER_ALL_MARKER);
-
- if (viewRoot.getChildCount() > 0) {
- for (UIComponent child : viewRoot.getChildren()) {
- child.encodeAll(context);
- }
- }
-
- writer.endUpdate();
- }
-
- private void renderState(FacesContext context) throws IOException {
- if (!context.getViewRoot().isTransient()) {
- // Get the view state and write it to the response..
- PartialViewContext pvc = context.getPartialViewContext();
- PartialResponseWriter writer = pvc.getPartialResponseWriter();
- writer.startUpdate(PartialResponseWriter.VIEW_STATE_MARKER);
- String state =
context.getApplication().getStateManager().getViewState(context);
- writer.write(state);
- writer.endUpdate();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.faces.context.PartialViewContext#release()
- */
- @Override
- public void release() {
- assertNotReleased();
-
- released = true;
-
- wrappedViewContext.release();
- wrappedViewContext = null;
-
- facesContext = null;
-
- renderAll = null;
- executeIds = null;
- renderIds = null;
-
- limitRender = false;
-
- activatorComponentId = null;
- behaviorEvent = null;
- contextMode = null;
- }
-
- protected void addImplicitExecuteIds(Collection<String> ids) {
- if (!ids.isEmpty()) {
- UIViewRoot root = facesContext.getViewRoot();
- if (root.getFacetCount() > 0) {
- if (root.getFacet(UIViewRoot.METADATA_FACET_NAME) != null) {
- //TODO nick - does ordering matter?
- ids.add(UIViewRoot.METADATA_FACET_NAME);
- //ids.add(0, UIViewRoot.METADATA_FACET_NAME);
- }
- }
- }
- }
-
- protected void addImplicitRenderIds(Collection<String> ids, boolean
limitRender) {
- }
-
- protected void renderExtensions(FacesContext context, UIComponent component) throws
IOException {
- // ADD deffered scripts
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance();
- ScriptsHolder scriptsHolder =
ServiceTracker.getService(JavaScriptService.class).getScriptsHolder(context);
- for (Object script : scriptsHolder.getScripts()) {
- ajaxContext.appendOncomplete(ScriptUtils.toScript(script));
- }
- for (Object script : scriptsHolder.getPageReadyScripts()) {
- ajaxContext.appendOncomplete(ScriptUtils.toScript(script));
- }
- CoreAjaxRendererUtils.renderAjaxExtensions(context, component);
- }
-
- private void assertNotReleased() {
- if (released) {
- throw new IllegalStateException("PartialViewContext already
released!");
- }
- }
-
- private boolean visitActivatorComponent(String componentActivatorId, VisitCallback
visitCallback, Set<VisitHint> visitHints) {
-
- Set<String> idsToVisit = Collections.singleton(componentActivatorId);
- VisitContext visitContext = new ExecuteExtendedVisitContext(facesContext,
idsToVisit, visitHints);
-
- boolean visitResult = facesContext.getViewRoot().visitTree(visitContext,
visitCallback);
- return visitResult;
- }
-
- private void cleanupAfterView() {
- ResponseWriter orig = (ResponseWriter)
facesContext.getAttributes().get(ORIGINAL_WRITER);
- assert null != orig;
- // move aside the PartialResponseWriter
- facesContext.setResponseWriter(orig);
- }
-
- protected ContextMode detectContextMode() {
- if (contextMode == null) {
- Map<String, String> requestParameterMap =
facesContext.getExternalContext().getRequestParameterMap();
- activatorComponentId = requestParameterMap.get(AJAX_COMPONENT_ID_PARAMETER);
-
- if (activatorComponentId != null) {
- contextMode = ContextMode.DIRECT;
- behaviorEvent = requestParameterMap.get(BEHAVIOR_EVENT_PARAMETER);
- } else {
- contextMode = ContextMode.WRAPPED;
- }
- }
-
- return contextMode;
- }
-
- private static final class RenderVisitCallback implements VisitCallback {
-
- private FacesContext ctx;
-
- private RenderVisitCallback(FacesContext ctx) {
- this.ctx = ctx;
- }
-
- private void logException(Exception e) {
- if (LOG.isErrorEnabled()) {
- LOG.error(e.getMessage());
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug(e.getMessage(), e);
- }
- }
-
- /* (non-Javadoc)
- * @see
javax.faces.component.visit.VisitCallback#visit(javax.faces.component.visit.VisitContext,
javax.faces.component.UIComponent)
- */
- public VisitResult visit(VisitContext context, UIComponent target) {
- String metaComponentId = (String)
ctx.getAttributes().get(ExtendedVisitContext.META_COMPONENT_ID);
- if (metaComponentId != null) {
- MetaComponentEncoder encoder = (MetaComponentEncoder) target;
- try {
- encoder.encodeMetaComponent(ctx, metaComponentId);
- } catch (Exception e) {
- logException(e);
- }
- } else {
- PartialResponseWriter writer =
ctx.getPartialViewContext().getPartialResponseWriter();
-
- try {
- writer.startUpdate(target.getClientId(ctx));
- try {
- // do the default behavior...
- target.encodeAll(ctx);
- } catch (Exception ce) {
- logException(ce);
- }
-
- writer.endUpdate();
- } catch (IOException e) {
- logException(e);
- }
- }
-
- // Once we visit a component, there is no need to visit
- // its children, since processDecodes/Validators/Updates and
- // encodeAll() already traverse the subtree. We return
- // VisitResult.REJECT to supress the subtree visit.
- return VisitResult.REJECT;
- }
- }
-}
Modified: trunk/core/impl/src/main/resources/META-INF/components.faces-config.xml
===================================================================
--- trunk/core/impl/src/main/resources/META-INF/components.faces-config.xml 2010-12-27
18:59:46 UTC (rev 20814)
+++ trunk/core/impl/src/main/resources/META-INF/components.faces-config.xml 2010-12-27
19:16:45 UTC (rev 20815)
@@ -2,8 +2,8 @@
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">
<factory>
-
<external-context-factory>org.richfaces.context.SkinningExternalContextFactory</external-context-factory>
- <partial-view-context-factory>org.richfaces.context.PartialViewContextFactoryImpl</partial-view-context-factory>
+
<external-context-factory>org.richfaces.context.SkinningExternalContextFactory</external-context-factory>
+ <partial-view-context-factory>org.richfaces.context.ExtendedPartialViewContextFactoryImpl</partial-view-context-factory>
</factory>
<application>
Modified: trunk/core/impl/src/main/resources/META-INF/faces-config.xml
===================================================================
--- trunk/core/impl/src/main/resources/META-INF/faces-config.xml 2010-12-27 18:59:46 UTC
(rev 20814)
+++ trunk/core/impl/src/main/resources/META-INF/faces-config.xml 2010-12-27 19:16:45 UTC
(rev 20815)
@@ -33,11 +33,6 @@
<managed-bean-class>org.richfaces.skin.SkinBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
- <managed-bean>
- <managed-bean-name>ajaxContext</managed-bean-name>
-
<managed-bean-class>org.ajax4jsf.context.AjaxContextImpl</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
<!-- component>
<component-type>javax.faces.ViewRoot</component-type>
Modified: trunk/examples/input-demo/src/main/webapp/resources/tests/autocomplete-qunit.js
===================================================================
---
trunk/examples/input-demo/src/main/webapp/resources/tests/autocomplete-qunit.js 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/examples/input-demo/src/main/webapp/resources/tests/autocomplete-qunit.js 2010-12-27
19:16:45 UTC (rev 20815)
@@ -35,8 +35,8 @@
equals(c.name, "Autocomplete", "name");
equals(c.id, AUTOCOMPLETE_ID+'Default', "id");
// test default options
- equals(c.options.selectedItemClass, 'rf-au-sel',
"options.selectedItemClass");
- equals(c.options.itemClass, 'rf-au-opt', "options.itemClass");
+ equals(c.options.selectedItemClass, 'rf-au-itm-sel',
"options.selectedItemClass");
+ equals(c.options.itemClass, 'rf-au-itm', "options.itemClass");
equals(c.options.autofill, true, "options.autofill");
equals(c.options.minChars, 1, "options.minChars");
equals(c.options.selectFirst, true, "options.selectFirst");
Modified:
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/util/AjaxRendererUtils.java
===================================================================
---
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/util/AjaxRendererUtils.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/util/AjaxRendererUtils.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -28,7 +28,6 @@
import javax.faces.context.FacesContext;
import org.ajax4jsf.component.AjaxClientBehavior;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.renderkit.AjaxConstants;
@@ -591,25 +590,4 @@
return (String) component.getAttributes().get(ONBEGIN_ATTR_NAME);
}
- protected static String getAjaxActionUrl(FacesContext facesContext) {
- return
AjaxContext.getCurrentInstance(facesContext).getAjaxActionURL(facesContext);
- }
-
- /**
- * @param facesContext
- * @return
- */
- public static boolean isAjaxRequest(FacesContext facesContext) {
- return AjaxContext.getCurrentInstance(facesContext).isAjaxRequest();
- }
-
- /**
- * @param facesContext
- * @param component
- */
- public static void addRegionsFromComponent(UIComponent component, FacesContext
facesContext) {
- AjaxContext.getCurrentInstance(facesContext).addRegionsFromComponent(component);
- }
-
-
}
Modified:
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/html/AjaxOutputPanelRenderer.java
===================================================================
---
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/html/AjaxOutputPanelRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/html/AjaxOutputPanelRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -23,13 +23,11 @@
import java.io.IOException;
import java.util.Iterator;
-import java.util.Set;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.component.AbstractOutputPanel;
import org.richfaces.renderkit.HtmlConstants;
@@ -56,33 +54,7 @@
@Override
public void encodeChildren(FacesContext context, UIComponent component) throws
IOException {
//
- AbstractOutputPanel panel = (AbstractOutputPanel) component;
- if (hasNoneLayout(panel)) {
- if (component.getChildCount() > 0) {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- boolean ajaxRequest = ajaxContext.isAjaxRequest();
- Set<String> ajaxRenderedAreas =
ajaxContext.getAjaxRenderedAreas();
- for (UIComponent child : component.getChildren()) {
- String childId = child.getClientId(context);
- if (child.isRendered()) {
- child.encodeAll(context);
- } else {
- // Render "dummy" span.
- ResponseWriter out = context.getResponseWriter();
- out.startElement(HtmlConstants.SPAN_ELEM, child);
- out.writeAttribute(HtmlConstants.ID_ATTRIBUTE, childId,
HtmlConstants.ID_ATTRIBUTE);
- out.writeAttribute(HtmlConstants.STYLE_ATTRIBUTE, "display:
none;", "style");
- out.endElement(HtmlConstants.SPAN_ELEM);
- }
- // register child as rendered
- if (ajaxRequest && null != ajaxRenderedAreas) {
- ajaxRenderedAreas.add(childId);
- }
- }
- }
- } else {
- renderChildren(context, component);
- }
+ renderChildren(context, component);
}
/* (non-Javadoc)
Modified:
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java
===================================================================
---
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -29,7 +29,9 @@
import java.util.Map;
import javax.el.ELException;
+import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
+import javax.el.MethodNotFoundException;
import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
@@ -44,13 +46,15 @@
import javax.faces.model.ResultSetDataModel;
import javax.servlet.jsp.jstl.sql.Result;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSObject;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.component.AbstractAutocomplete;
import org.richfaces.component.AutocompleteLayout;
import org.richfaces.component.MetaComponentResolver;
import org.richfaces.component.util.InputUtils;
+import org.richfaces.context.ExtendedPartialViewContext;
+import org.richfaces.log.Logger;
+import org.richfaces.log.RichfacesLogger;
/**
* @author Nick Belaevski
@@ -67,6 +71,8 @@
})
public abstract class AutocompleteRendererBase extends InputRendererBase implements
MetaComponentRenderer {
+ private static final Logger LOGGER = RichfacesLogger.RENDERKIT.getLogger();
+
public JSReference getClientFilterFunction(UIComponent component) {
AbstractAutocomplete autocomplete = (AbstractAutocomplete) component;
String clientFilter = (String)
autocomplete.getAttributes().get("clientFilterFunction");
@@ -88,22 +94,19 @@
Map<String, String> requestParameters =
facesContext.getExternalContext().getRequestParameterMap();
String value = requestParameters.get(component.getClientId(facesContext) +
"Value");
try {
- // String value = getInputValue(facesContext, component);
-
- itemsObject = autocompleteMethod.invoke(facesContext.getELContext(), new
Object[]{facesContext,
- component, value});
- } catch (ELException e) {
try {
- autocompleteMethod = facesContext
- .getApplication()
- .getExpressionFactory()
- .createMethodExpression(facesContext.getELContext(),
autocompleteMethod.getExpressionString(),
- Void.class, new Class[]{String.class});
+ // String value = getInputValue(facesContext, component);
+ itemsObject = autocompleteMethod.invoke(facesContext.getELContext(),
new Object[]{facesContext,
+ component, value});
+ } catch (MethodNotFoundException e) {
+ ExpressionFactory expressionFactory =
facesContext.getApplication().getExpressionFactory();
+ autocompleteMethod =
expressionFactory.createMethodExpression(facesContext.getELContext(),
+ autocompleteMethod.getExpressionString(),
+ Object.class, new Class[]{String.class});
itemsObject = autocompleteMethod.invoke(facesContext.getELContext(),
new Object[]{value});
- } catch (ELException ee) {
- ee.printStackTrace();
}
-
+ } catch (ELException ee) {
+ LOGGER.error(ee.getMessage(), ee);
}
} else {
itemsObject = component.getAutocompleteList();
@@ -293,7 +296,7 @@
partialWriter.endUpdate();
if (!fetchValues.isEmpty()) {
- Map<String, Object> dataMap =
AjaxContext.getCurrentInstance(context).getResponseComponentDataMap();
+ Map<String, Object> dataMap =
ExtendedPartialViewContext.getInstance(context).getResponseComponentDataMap();
dataMap.put(component.getClientId(context), fetchValues);
}
} else {
Modified:
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
===================================================================
---
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -45,7 +45,6 @@
import javax.faces.convert.ConverterException;
import javax.faces.convert.DateTimeConverter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.component.AbstractCalendar;
@@ -53,6 +52,7 @@
import org.richfaces.component.util.HtmlUtil;
import org.richfaces.component.util.MessageUtil;
import org.richfaces.component.util.SelectUtils;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.event.CurrentDateChangeEvent;
import org.richfaces.utils.CalendarHelper;
@@ -558,7 +558,7 @@
if (AbstractCalendar.DAYSDATA_META_COMPONENT_ID.equals(metaComponentId)) {
Object preload = ((AbstractCalendar) component).getPreload();
if (preload != null) {
- Map<String, Object> dataMap =
AjaxContext.getCurrentInstance(context).getResponseComponentDataMap();
+ Map<String, Object> dataMap =
ExtendedPartialViewContext.getInstance(context).getResponseComponentDataMap();
dataMap.put(component.getClientId(context), preload);
}
} else {
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderBase.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderBase.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -28,11 +28,11 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunction;
import org.richfaces.component.AbstractTree;
import org.richfaces.component.AbstractTreeNode;
import org.richfaces.component.util.HtmlUtil;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.model.TreeDataModelTuple;
import org.richfaces.model.TreeDataVisitor;
@@ -191,8 +191,8 @@
TreeNodeState initialState = (TreeNodeState)
context.getAttributes().get(TreeNodeRendererBase.AJAX_TOGGLED_NODE_STATE_ATTRIBUTE);
if (initialState.isDifferentThan(nodeState)) {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- ajaxContext.appendOncomplete(new
JSFunction("RichFaces.ui.TreeNode.emitToggleEvent",
treeNode.getClientId(context)));
+ ExtendedPartialViewContext partialContext =
ExtendedPartialViewContext.getInstance(context);
+ partialContext.appendOncomplete(new
JSFunction("RichFaces.ui.TreeNode.emitToggleEvent",
treeNode.getClientId(context)));
}
}
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -36,13 +36,13 @@
import javax.faces.context.PartialViewContext;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.component.AbstractTree;
import org.richfaces.component.AbstractTreeNode;
import org.richfaces.component.MetaComponentResolver;
import org.richfaces.component.SwitchType;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.event.TreeSelectionChangeEvent;
import org.richfaces.log.Logger;
import org.richfaces.log.RichfacesLogger;
@@ -179,8 +179,8 @@
JSFunction function = new JSFunction("RichFaces.$",
component.getClientId(context));
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- ajaxContext.appendOncomplete(function.toScript() +
".__updateSelectionFromInput();");
+ ExtendedPartialViewContext partialContext =
ExtendedPartialViewContext.getInstance(context);
+ partialContext.appendOncomplete(function.toScript() +
".__updateSelectionFromInput();");
} else {
throw new IllegalArgumentException(metaComponentId);
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/CollapsiblePanelRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/CollapsiblePanelRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/CollapsiblePanelRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -22,24 +22,28 @@
package org.richfaces.renderkit.html;
-import static org.richfaces.renderkit.HtmlConstants.*;
+import static org.richfaces.component.AbstractCollapsiblePanel.States.collapsed;
+import static org.richfaces.component.AbstractCollapsiblePanel.States.expanded;
+import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.DIV_ELEM;
+import static org.richfaces.renderkit.HtmlConstants.ID_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.STYLE_ATTRIBUTE;
-import org.ajax4jsf.javascript.JSObject;
-import org.richfaces.component.AbstractCollapsiblePanel;
-import org.richfaces.component.AbstractTogglePanel;
-import org.richfaces.component.AbstractTogglePanelTitledItem;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import static org.richfaces.component.AbstractCollapsiblePanel.States.*;
+import org.ajax4jsf.javascript.JSObject;
+import org.richfaces.component.AbstractCollapsiblePanel;
+import org.richfaces.component.AbstractTogglePanel;
+import org.richfaces.component.AbstractTogglePanelTitledItem;
/**
* @author akolonitsky
@@ -80,7 +84,7 @@
context.getPartialViewContext().getRenderIds().add(clientId);
//TODO nick - this should be done on encode, not on decode
- addOnCompleteParam(newValue, panel.getClientId());
+ addOnCompleteParam(context, newValue, panel.getClientId());
}
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -23,23 +23,39 @@
package org.richfaces.renderkit.html;
+import static org.richfaces.renderkit.HtmlConstants.ALT_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.DIV_ELEM;
+import static org.richfaces.renderkit.HtmlConstants.ID_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.IMG_ELEMENT;
+import static org.richfaces.renderkit.HtmlConstants.INPUT_ELEM;
+import static org.richfaces.renderkit.HtmlConstants.INPUT_TYPE_HIDDEN;
+import static org.richfaces.renderkit.HtmlConstants.NAME_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.SRC_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.STYLE_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.TABLE_ELEMENT;
+import static org.richfaces.renderkit.HtmlConstants.TBODY_ELEMENT;
+import static org.richfaces.renderkit.HtmlConstants.TD_ELEM;
+import static org.richfaces.renderkit.HtmlConstants.TR_ELEMENT;
+import static org.richfaces.renderkit.HtmlConstants.TYPE_ATTR;
+import static org.richfaces.renderkit.HtmlConstants.VALUE_ATTRIBUTE;
+import static org.richfaces.renderkit.html.TogglePanelRenderer.addEventOption;
+import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
import org.ajax4jsf.javascript.JSObject;
import org.richfaces.component.AbstractPanelMenuGroup;
import org.richfaces.component.AbstractPanelMenuItem;
import org.richfaces.component.html.HtmlPanelMenuGroup;
import org.richfaces.renderkit.RenderKitUtils;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.richfaces.renderkit.HtmlConstants.*;
-import static org.richfaces.renderkit.html.TogglePanelRenderer.addEventOption;
-import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
-
/**
* @author akolonitsky
* @since 2010-10-25
@@ -76,7 +92,7 @@
context.getPartialViewContext().getRenderIds().add(clientId);
//TODO nick - this should be done on encode, not on decode
- PanelMenuRenderer.addOnCompleteParam(clientId);
+ PanelMenuRenderer.addOnCompleteParam(context, clientId);
}
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -23,25 +23,26 @@
package org.richfaces.renderkit.html;
-import org.ajax4jsf.context.AjaxContext;
-import org.ajax4jsf.javascript.JSObject;
-import org.richfaces.component.AbstractPanelMenu;
-import org.richfaces.component.AbstractPanelMenuItem;
-import org.richfaces.component.html.HtmlPanelMenu;
-import org.richfaces.renderkit.HtmlConstants;
+import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
+import static org.richfaces.renderkit.html.TogglePanelRenderer.getValueRequestParamName;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.event.ActionEvent;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
-import static org.richfaces.renderkit.html.TogglePanelRenderer.getValueRequestParamName;
+import org.ajax4jsf.javascript.JSObject;
+import org.richfaces.component.AbstractPanelMenu;
+import org.richfaces.component.AbstractPanelMenuItem;
+import org.richfaces.component.html.HtmlPanelMenu;
+import org.richfaces.context.ExtendedPartialViewContext;
+import org.richfaces.renderkit.HtmlConstants;
/**
* @author akolonitsky
@@ -81,13 +82,13 @@
context.getPartialViewContext().getRenderIds().add(panelItem.getClientId(context));
//TODO nick - this should be done on encode, not on decode
- addOnCompleteParam(panelItem.getClientId(context));
+ addOnCompleteParam(context, panelItem.getClientId(context));
}
}
}
- protected static void addOnCompleteParam(String itemId) {
- AjaxContext.getCurrentInstance().appendOncomplete(new StringBuilder()
+ protected static void addOnCompleteParam(FacesContext context, String itemId) {
+ ExtendedPartialViewContext.getInstance(context).appendOncomplete(new
StringBuilder()
.append("RichFaces.$('").append(itemId).append("').onCompleteHandler();").toString());
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/ProgressBarBaseRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/ProgressBarBaseRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/ProgressBarBaseRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -37,12 +37,12 @@
import javax.faces.context.PartialResponseWriter;
import javax.faces.context.PartialViewContext;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.component.AbstractProgressBar;
import org.richfaces.component.MetaComponentResolver;
import org.richfaces.component.NumberUtils;
import org.richfaces.component.SwitchType;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.AjaxFunction;
import org.richfaces.renderkit.AjaxOptions;
import org.richfaces.renderkit.MetaComponentRenderer;
@@ -169,8 +169,8 @@
if (AbstractProgressBar.STATE_META_COMPONENT_ID.equals(metaComponentId)) {
ProgressBarState state = getCurrentState(context, component);
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- ajaxContext.getResponseComponentDataMap().put(component.getClientId(context),
NumberUtils.getNumber(component.getAttributes().get("value")));
+ ExtendedPartialViewContext partialContext =
ExtendedPartialViewContext.getInstance(context);
+
partialContext.getResponseComponentDataMap().put(component.getClientId(context),
NumberUtils.getNumber(component.getAttributes().get("value")));
PartialResponseWriter partialResponseWriter =
context.getPartialViewContext().getPartialResponseWriter();
partialResponseWriter.startUpdate(state.getStateClientId(context,
component));
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -34,13 +34,13 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSObject;
import org.ajax4jsf.javascript.JSReference;
import org.richfaces.component.AbstractTogglePanel;
import org.richfaces.component.AbstractTogglePanelItem;
import org.richfaces.component.util.HtmlUtil;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.AjaxOptions;
import org.richfaces.renderkit.HtmlConstants;
import org.richfaces.renderkit.util.AjaxRendererUtils;
@@ -87,17 +87,17 @@
context.getPartialViewContext().getRenderIds().add(panelItem.getClientId(context));
//TODO nick - this should be done on encode, not on decode
- addOnCompleteParam(newValue, panel.getClientId());
+ addOnCompleteParam(context, newValue, panel.getClientId());
}
}
}
- protected static void addOnCompleteParam(String newValue, String panelId) {
+ protected static void addOnCompleteParam(FacesContext context, String newValue,
String panelId) {
StringBuilder onComplete = new StringBuilder();
onComplete.append("RichFaces.$('").append(panelId)
.append("').onCompleteHandler('").append(newValue).append("');");
- AjaxContext.getCurrentInstance().appendOncomplete(onComplete.toString());
+
ExtendedPartialViewContext.getInstance(context).appendOncomplete(onComplete.toString());
}
static String getValueRequestParamName(FacesContext context, UIComponent component)
{
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TooltipRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TooltipRenderer.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TooltipRenderer.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -23,7 +23,8 @@
package org.richfaces.renderkit.html;
-import static org.richfaces.renderkit.HtmlConstants.*;
+import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
+import static org.richfaces.renderkit.HtmlConstants.ID_ATTRIBUTE;
import static org.richfaces.renderkit.RenderKitUtils.renderPassThroughAttributes;
import static org.richfaces.renderkit.html.TogglePanelRenderer.addEventOption;
import static org.richfaces.renderkit.html.TogglePanelRenderer.getAjaxOptions;
@@ -39,11 +40,11 @@
import javax.faces.context.PartialResponseWriter;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSObject;
import org.richfaces.TooltipMode;
import org.richfaces.component.AbstractTooltip;
import org.richfaces.component.html.HtmlTooltip;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.HtmlConstants;
import org.richfaces.renderkit.MetaComponentRenderer;
@@ -81,12 +82,12 @@
context.getPartialViewContext().getRenderIds().add(tooltip.getContentClientId(context));
//TODO nick - this should be done on encode, not on decode
- addOnCompleteParam(tooltip.getClientId());
+ addOnCompleteParam(context, tooltip.getClientId());
}
}
- protected static void addOnCompleteParam(String tooltipId) {
- AjaxContext.getCurrentInstance().appendOncomplete(new StringBuilder()
+ protected static void addOnCompleteParam(FacesContext context, String tooltipId) {
+ ExtendedPartialViewContext.getInstance(context).appendOncomplete(new
StringBuilder()
.append("RichFaces.$('").append(tooltipId).append("').onCompleteHandler();").toString());
}
Modified:
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIAjaxValidator.java
===================================================================
---
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIAjaxValidator.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIAjaxValidator.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -39,7 +39,6 @@
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
-import org.ajax4jsf.context.AjaxContext;
import org.richfaces.event.ValidatorEvent;
/**
@@ -126,14 +125,14 @@
}
public void encodeAjax(FacesContext context) throws IOException {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- Set<String> renderedAreas = ajaxContext.getAjaxRenderedAreas();
- for (UIComponent message : getMessages(context, this)) {
- if (message.isRendered()) {
- message.encodeAll(context);
- renderedAreas.add(message.getClientId(context));
- }
- }
+// AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+// Set<String> renderedAreas = ajaxContext.getAjaxRenderedAreas();
+// for (UIComponent message : getMessages(context, this)) {
+// if (message.isRendered()) {
+// message.encodeAll(context);
+// renderedAreas.add(message.getClientId(context));
+// }
+// }
// Write information about encoded areas after submission.
// AjaxRendererUtils.encodeAreas(context, this);
}
Deleted: trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIBeanValidator.java
===================================================================
---
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIBeanValidator.java 2010-12-27
18:59:46 UTC (rev 20814)
+++
trunk/ui/validator/ui/src/main/java/org/richfaces/component/UIBeanValidator.java 2010-12-27
19:16:45 UTC (rev 20815)
@@ -1,25 +0,0 @@
-/**
- *
- */
-package org.richfaces.component;
-
-/**
- * Stage class to keep backward compatibility.
- *
- * @author asmirnov
- * @deprecated That class has been renamed, Use {@link UIAjaxValidator} instead
- *
- */
-public abstract class UIBeanValidator extends UIAjaxValidator {
-
- /*
- * (non-Javadoc)
- *
- * @see javax.faces.component.UIComponent#getFamily()
- */
- @Override
- public String getFamily() {
- return COMPONENT_FAMILY;
- }
-
-}