Revision: 1241
http://stripes.svn.sourceforge.net/stripes/?rev=1241&view=rev
Author: bengunter
Date: 2010-05-21 18:26:06 +0000 (Fri, 21 May 2010)
Log Message:
-----------
STS-391: Use the layout writer's silent mode more effectively. This eliminates
all the superfluous junk that would otherwise be generated and sent to output
by the multiple tag evaluations involved in the layout rendering process.
Modified Paths:
--------------
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutContext.java
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
2010-05-21 15:59:32 UTC (rev 1240)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutComponentTag.java
2010-05-21 18:26:06 UTC (rev 1241)
@@ -40,7 +40,7 @@
private String name;
private LayoutContext context;
- private Boolean silent;
+ private boolean silent;
/** Gets the name of the component. */
public String getName() { return name; }
@@ -102,12 +102,12 @@
public int doStartTag() throws JspException {
try {
LayoutContext context = getContext();
+ silent = context.getOut().isSilent();
if (isChildOfRender()) {
if (context.isComponentRenderPhase()) {
if (isCurrentComponent()) {
log.debug("Render ", getName(), " in ",
context.getRenderPage());
- silent = context.getOut().isSilent();
context.getOut().setSilent(false, pageContext);
return EVAL_BODY_INCLUDE;
}
@@ -144,7 +144,10 @@
String renderPage = renderer.getRenderPage();
log.debug("Execute component ", getName(), " in ",
context
.getDefinitionPage(), " with include of ",
renderPage);
+ boolean silent = context.getOut().isSilent();
+ context.getOut().setSilent(true, pageContext);
pageContext.include(renderPage, false);
+ context.getOut().setSilent(silent, pageContext);
}
}
context.setComponentRenderPhase(false);
@@ -156,7 +159,6 @@
log.debug("Component was not present in ",
context.getRenderPage(),
" so using default content from ",
context.getDefinitionPage());
- silent = context.getOut().isSilent();
context.getOut().setSilent(false, pageContext);
context.setComponent(null);
return EVAL_BODY_INCLUDE;
@@ -167,6 +169,7 @@
}
}
+ context.getOut().setSilent(true, pageContext);
return SKIP_BODY;
}
catch (ServletException e) {
@@ -194,14 +197,14 @@
if (isCurrentComponent())
context.setComponent(null);
- if (silent != null)
- context.getOut().setSilent(silent, pageContext);
+ // Restore output's silent flag
+ context.getOut().setSilent(silent, pageContext);
return EVAL_PAGE;
}
finally {
this.context = null;
- this.silent = null;
+ this.silent = false;
}
}
}
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutContext.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutContext.java
2010-05-21 15:59:32 UTC (rev 1240)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutContext.java
2010-05-21 18:26:06 UTC (rev 1241)
@@ -14,7 +14,6 @@
*/
package net.sourceforge.stripes.tag.layout;
-import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
@@ -67,14 +66,6 @@
PageContext pageContext = renderTag.getPageContext();
LinkedList<LayoutContext> stack = getStack(pageContext, true);
if (stack.isEmpty()) {
- // Clear the output buffer before beginning a layout render
- try {
- pageContext.getOut().clearBuffer();
- }
- catch (IOException e) {
- log.warn("Failed to clear output buffer before rendering a
layout");
- }
-
// Create a new layout writer and push a new body
context.out = new LayoutWriter(pageContext.getOut());
pageContext.pushBody(context.out);
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
2010-05-21 15:59:32 UTC (rev 1240)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutDefinitionTag.java
2010-05-21 18:26:06 UTC (rev 1241)
@@ -66,6 +66,7 @@
public int doStartTag() throws JspException {
LayoutContext context = getContext(); // Initialize context
renderPhase = context.isComponentRenderPhase(); // Initialize phase
flag
+ silent = context.getOut().isSilent();
if (!renderPhase) {
// Put any additional parameters into page context for the
definition to use
@@ -81,8 +82,7 @@
context.setRendered(true);
}
- // Save output's current silent flag to be restored later
- silent = context.getOut().isSilent();
+ // Enable output only if this is the definition execution, not a
component render
context.getOut().setSilent(renderPhase, pageContext);
return EVAL_BODY_INCLUDE;
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
2010-05-21 15:59:32 UTC (rev 1240)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/tag/layout/LayoutRenderTag.java
2010-05-21 18:26:06 UTC (rev 1241)
@@ -14,6 +14,7 @@
*/
package net.sourceforge.stripes.tag.layout;
+import java.io.IOException;
import java.util.LinkedList;
import javax.servlet.jsp.JspException;
@@ -99,6 +100,7 @@
@Override
public int doStartTag() throws JspException {
LayoutContext context = getContext();
+ silent = context.getOut().isSilent();
if (isNewContext()) {
log.debug("Start layout init in ", context.getRenderPage());
@@ -113,9 +115,8 @@
pushPageContextAttributes(context.getParameters());
}
- // Save output's current silent flag to be restored later
- silent = context.getOut().isSilent();
- context.getOut().setSilent(false, pageContext);
+ // Render tags never output their contents directly
+ context.getOut().setSilent(true, pageContext);
log.debug("Start component render phase for ", context.getComponent(),
" in ", context
.getRenderPage());
@@ -138,17 +139,26 @@
try {
LayoutContext context = getContext();
if (isNewContext()) {
+ // Substitution of the layout writer for the regular JSP
writer does not work for
+ // the initial render tag. Its body evaluation still uses the
original JSP writer
+ // for output. Clear the output buffer before executing the
definition page.
+ if (isOuterTag()) {
+ try {
+ context.getOut().clear();
+ }
+ catch (IOException e) {
+ log.debug("Could not clear output buffer: ",
e.getMessage());
+ }
+ }
+
log.debug("End layout init in ", context.getRenderPage());
try {
log.debug("Start layout exec in ",
context.getDefinitionPage());
- boolean outer = isOuterTag();
boolean silent = context.getOut().isSilent();
- if (!outer)
- context.getOut().setSilent(true, pageContext);
+ context.getOut().setSilent(true, pageContext);
pageContext.include(this.name, false);
- if (!outer)
- context.getOut().setSilent(silent, pageContext);
+ context.getOut().setSilent(silent, pageContext);
log.debug("End layout exec in ",
context.getDefinitionPage());
}
catch (Exception e) {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development