| Issue 57: | Unbalanced section push and pop in the Java implementation | |
| 2 people starred this issue and may be notified of changes. | Back to list |
When the data is missing for the template section, the SectionStatement.java caused the exception in public Object pushSection(String sectionName) of the file ScopedContext.java. It starts happening for the second section of missing data.
Please see my fix bellow.
Regards,
Louis
///////////////////////////////////////////////////////////
public void execute(ScopedContext context, ITemplateRenderCallback callback) {
// push a context first
Object cursorPosition = context
.pushSection(this.block.getSectionName());
if (!context.isEmptyContext(cursorPosition)) {
TemplateExecutor.execute(this.block.getStatements(), context,
callback);
//context.pop(); // Louis fix, remove this line
} else {
TemplateExecutor.execute(this.block.getStatements("or"), context,
callback);
}
context.pop(); // Louis fix, add this line
}
////////////////////////////////////////////////////////
Mar 12, 2012
(No comment was entered for this change.)
Status:
Accepted
Owner: isungu...@issart.com Labels: Todo-Java
Mar 12, 2012
(No comment was entered for this change.)
Status:
Fixed
|
Thanks, Louis, for pointing to issue source. But general problem is that while processing 'or' statement stack top contains 'null' value. This value remained after unsuccessful lookup for beginning of 'section' statement and must be removed before executing 'or' section. So fix should looks like this /////////////////////////////////////////////////////////// public void execute(ScopedContext context, ITemplateRenderCallback callback) { // push a context first Object cursorPosition = context .pushSection(this.block.getSectionName()); if (!context.isEmptyContext(cursorPosition)) { TemplateExecutor.execute(this.block.getStatements(), context, callback); context.pop(); // leave as is } else { context.pop(); // add this line TemplateExecutor.execute(this.block.getStatements("or"), context, callback); } } ////////////////////////////////////////////////////////