Revision: 1425
http://stripes.svn.sourceforge.net/stripes/?rev=1425&view=rev
Author: bengunter
Date: 2011-04-21 19:54:53 +0000 (Thu, 21 Apr 2011)
Log Message:
-----------
Applied patch for STS-788 from 1.5.x branch r1424
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutWriter.java
Modified:
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
2011-04-21 19:40:45 UTC (rev 1424)
+++
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
2011-04-21 19:54:53 UTC (rev 1425)
@@ -14,6 +14,7 @@
*/
package net.sourceforge.stripes.tag.layout;
+import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
@@ -265,6 +266,9 @@
return EVAL_PAGE;
}
+ catch (IOException e) {
+ throw new JspException(e);
+ }
finally {
this.context = null;
this.silent = false;
Modified:
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
2011-04-21 19:40:45 UTC (rev 1424)
+++
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
2011-04-21 19:54:53 UTC (rev 1425)
@@ -14,6 +14,7 @@
*/
package net.sourceforge.stripes.tag.layout;
+import java.io.IOException;
import java.util.Map;
import javax.servlet.jsp.JspException;
@@ -63,27 +64,32 @@
*/
@Override
public int doStartTag() throws JspException {
- LayoutContext context = getContext(); // Initialize context
- renderPhase = context.isComponentRenderPhase(); // Initialize phase
flag
- silent = context.getOut().isSilent();
+ try {
+ LayoutContext context = getContext(); // Initialize context
+ renderPhase = context.isComponentRenderPhase(); // Initialize
phase flag
+ silent = context.getOut().isSilent();
- // Flag this definition has rendered, even though it's not really done
yet.
- context.setRendered(true);
+ // Flag this definition has rendered, even though it's not really
done yet.
+ context.setRendered(true);
- // Put any additional parameters into page context for the definition
to use
- if (!renderPhase) {
- for (Map.Entry<String, Object> entry :
context.getParameters().entrySet()) {
- pageContext.setAttribute(entry.getKey(), entry.getValue());
+ // Put any additional parameters into page context for the
definition to use
+ if (!renderPhase) {
+ for (Map.Entry<String, Object> entry :
context.getParameters().entrySet()) {
+ pageContext.setAttribute(entry.getKey(), entry.getValue());
+ }
}
- }
- // Put component renderers into the page context, even those from
previous contexts
- exportComponentRenderers();
+ // Put component renderers into the page context, even those from
previous contexts
+ exportComponentRenderers();
- // Enable output only if this is the definition execution, not a
component render
- context.getOut().setSilent(renderPhase, pageContext);
+ // Enable output only if this is the definition execution, not a
component render
+ context.getOut().setSilent(renderPhase, pageContext);
- return EVAL_BODY_INCLUDE;
+ return EVAL_BODY_INCLUDE;
+ }
+ catch (IOException e) {
+ throw new JspException(e);
+ }
}
/**
@@ -97,6 +103,9 @@
getContext().getOut().setSilent(silent, pageContext);
return SKIP_PAGE;
}
+ catch (IOException e) {
+ throw new JspException(e);
+ }
finally {
this.context = null;
this.renderPhase = false;
Modified:
trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
2011-04-21 19:40:45 UTC (rev 1424)
+++ trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
2011-04-21 19:54:53 UTC (rev 1425)
@@ -14,6 +14,8 @@
*/
package net.sourceforge.stripes.tag.layout;
+import java.io.IOException;
+
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTag;
@@ -95,24 +97,29 @@
*/
@Override
public int doStartTag() throws JspException {
- LayoutContext context = getContext();
- silent = context.getOut().isSilent();
+ try {
+ LayoutContext context = getContext();
+ silent = context.getOut().isSilent();
- if (contextIsNew) {
- log.debug("Start layout init in ", context.getRenderPage());
- pushPageContextAttributes(context.getParameters());
- }
+ if (contextIsNew) {
+ log.debug("Start layout init in ", context.getRenderPage());
+ pushPageContextAttributes(context.getParameters());
+ }
- if (context.isComponentRenderPhase()) {
- log.debug("Start component render phase for ",
context.getComponent(), " in ",
- context.getRenderPage());
- exportComponentRenderers();
- }
+ if (context.isComponentRenderPhase()) {
+ log.debug("Start component render phase for ",
context.getComponent(), " in ",
+ context.getRenderPage());
+ exportComponentRenderers();
+ }
- // Render tags never output their contents directly
- context.getOut().setSilent(true, pageContext);
+ // Render tags never output their contents directly
+ context.getOut().setSilent(true, pageContext);
- return contextIsNew ? EVAL_BODY_BUFFERED : EVAL_BODY_INCLUDE;
+ return contextIsNew ? EVAL_BODY_BUFFERED : EVAL_BODY_INCLUDE;
+ }
+ catch (IOException e) {
+ throw new JspException(e);
+ }
}
/**
@@ -172,9 +179,13 @@
);
}
+ context.getOut().setSilent(silent, pageContext);
LayoutContext.pop(pageContext);
popPageContextAttributes(); // remove any dynattrs from page
scope
}
+ else {
+ context.getOut().setSilent(silent, pageContext);
+ }
if (context.isComponentRenderPhase()) {
log.debug("End component render phase for ",
context.getComponent(), " in ",
@@ -182,10 +193,11 @@
cleanUpComponentRenderers();
}
- // Restore output's silent flag
- context.getOut().setSilent(silent, pageContext);
return EVAL_PAGE;
}
+ catch (IOException e) {
+ throw new JspException(e);
+ }
finally {
this.context = null;
this.contextIsNew = false;
Modified: trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutWriter.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutWriter.java
2011-04-21 19:40:45 UTC (rev 1424)
+++ trunk/stripes/src/net/sourceforge/stripes/tag/layout/LayoutWriter.java
2011-04-21 19:54:53 UTC (rev 1425)
@@ -38,8 +38,11 @@
public class LayoutWriter extends Writer {
private static final Log log = Log.getInstance(LayoutWriter.class);
+ /** The control character that, when encountered in the output stream,
toggles the silent state. */
+ private static final char TOGGLE = 0;
+
private LinkedList<Writer> writers = new LinkedList<Writer>();
- private boolean silent;
+ private boolean silent, silentState;
/**
* Create a new layout writer that wraps the given JSP writer.
@@ -64,12 +67,17 @@
/**
* Enable or disable silent mode. The output buffer for the given page
context will be flushed
* before silent mode is enabled to ensure all buffered data are written.
+ *
+ * @param silent True to silence output, false to enable output.
+ * @param pageContext The page context in use at the time output is to be
silenced.
+ * @throws IOException If an error occurs writing to output.
*/
- public void setSilent(boolean silent, PageContext pageContext) {
+ public void setSilent(boolean silent, PageContext pageContext) throws
IOException {
if (silent != this.silent) {
+ pageContext.getOut().write(TOGGLE);
tryFlush(pageContext);
this.silent = silent;
- log.trace("Output is " + (silent ? "DISABLED" : "ENABLED"));
+ log.trace("Output is ", (silent ? "DISABLED" : "ENABLED"));
}
}
@@ -144,7 +152,21 @@
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
- if (!isSilent())
- getOut().write(cbuf, off, len);
+ for (int i = off, mark = i, n = i + len; i < n; ++i) {
+ switch (cbuf[i]) {
+ case TOGGLE:
+ if (this.silentState)
+ mark = i + 1;
+ else if (i > mark)
+ getOut().write(cbuf, mark, i - mark);
+ this.silentState = !this.silentState;
+ break;
+ default:
+ if (this.silentState)
+ ++mark;
+ else if (i > mark && i == n - 1)
+ getOut().write(cbuf, mark, i - mark + 1);
+ }
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Fulfilling the Lean Software Promise
Lean software platforms are now widely adopted and the benefits have been
demonstrated beyond question. Learn why your peers are replacing JEE
containers with lightweight application servers - and what you can gain
from the move. http://p.sf.net/sfu/vmware-sfemails
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development