Author: nbelaevski
Date: 2010-05-18 20:33:46 -0400 (Tue, 18 May 2010)
New Revision: 17113
Added:
root/core/trunk/impl/src/main/java/org/richfaces/renderkit/OnOffResponseWriter.java
Modified:
root/core/trunk/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java
Log:
https://jira.jboss.org/browse/RF-7856
https://jira.jboss.org/browse/RF-8630
Modified:
root/core/trunk/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java
===================================================================
---
root/core/trunk/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java 2010-05-19
00:33:41 UTC (rev 17112)
+++
root/core/trunk/impl/src/main/java/org/richfaces/context/PartialViewContextImpl.java 2010-05-19
00:33:46 UTC (rev 17113)
@@ -44,6 +44,7 @@
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
+import org.richfaces.component.MetaComponentEncoder;
import org.richfaces.log.RichfacesLogger;
import org.slf4j.Logger;
@@ -416,22 +417,32 @@
* @see
javax.faces.component.visit.VisitCallback#visit(javax.faces.component.visit.VisitContext,
javax.faces.component.UIComponent)
*/
public VisitResult visit(VisitContext context, UIComponent target) {
- PartialResponseWriter writer =
ctx.getPartialViewContext().getPartialResponseWriter();
+ 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.startUpdate(target.getClientId(ctx));
+ try {
+ // do the default behavior...
+ target.encodeAll(ctx);
+ } catch (Exception ce) {
+ logException(ce);
+ }
+
+ writer.endUpdate();
+ } catch (IOException e) {
+ logException(e);
}
-
- 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
Added:
root/core/trunk/impl/src/main/java/org/richfaces/renderkit/OnOffResponseWriter.java
===================================================================
--- root/core/trunk/impl/src/main/java/org/richfaces/renderkit/OnOffResponseWriter.java
(rev 0)
+++
root/core/trunk/impl/src/main/java/org/richfaces/renderkit/OnOffResponseWriter.java 2010-05-19
00:33:46 UTC (rev 17113)
@@ -0,0 +1,101 @@
+/*
+ * 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.renderkit;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.faces.context.ResponseWriter;
+import javax.faces.context.ResponseWriterWrapper;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class OnOffResponseWriter extends ResponseWriterWrapper {
+
+ private static final Writer NO_OP_WRITER = new Writer() {
+
+ @Override
+ public void write(char[] cbuf, int off, int len) throws IOException {
+ //do nothing
+ }
+
+ public void write(char[] cbuf) throws IOException {
+ //do nothing
+ };
+
+ public void write(int c) throws IOException {
+ //do nothing
+ };
+
+ public void write(String str) throws IOException {
+ //do nothing
+ };
+
+ public void write(String str, int off, int len) throws IOException {
+ //do nothing
+ };
+
+ @Override
+ public void flush() throws IOException {
+ //do nothing
+ }
+
+ @Override
+ public void close() throws IOException {
+ //do nothing
+ }
+ };
+
+ private boolean switchedOn = false;
+
+ private ResponseWriter wrappedWriter;
+
+ private ResponseWriter stubWriter;
+
+ public OnOffResponseWriter(ResponseWriter wrappedWriter) {
+ super();
+ this.wrappedWriter = wrappedWriter;
+ }
+
+ @Override
+ public ResponseWriter getWrapped() {
+ if (!switchedOn) {
+ if (stubWriter == null) {
+ stubWriter = wrappedWriter.cloneWithWriter(NO_OP_WRITER);
+ }
+
+ return stubWriter;
+ } else {
+ return wrappedWriter;
+ }
+ }
+
+ public void setSwitchedOn(boolean newState) {
+ switchedOn = newState;
+ }
+
+ public boolean isSwitchedOn() {
+ return switchedOn;
+ }
+}