Java Code Examples for javax.servlet.jsp.PageContext#getOut()

The following examples show how to use javax.servlet.jsp.PageContext#getOut() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GroupTitleLineRenderer.java    From kfs with GNU Affero General Public License v3.0 6 votes vote down vote up
protected void renderGroupLevelActions(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();

    try {
        out.write(this.buildGroupActionsBeginning());

        this.renderGroupActions(pageContext, parentTag);

        this.renderUploadCell(pageContext, parentTag);

        out.write(this.buildGroupActionsColumnEnding());
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering group level actions", ioe);
    }
}
 
Example 2
Source File: TableCellRenderer.java    From kfs with GNU Affero General Public License v3.0 6 votes vote down vote up
/**
 * Renders the table cell as a header cell as well as rendering all children renderable elements of the cell
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    try {
        out.write(buildBeginningTag());
        if (cell.hasChildElements()) {
            cell.renderChildrenElements(pageContext, parentTag);
        } else {
            out.write(" ");
        }
        out.write(buildEndingTag());
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering table cell", ioe);
    }
}
 
Example 3
Source File: BooleanRenderer.java    From webcurator with Apache License 2.0 6 votes vote down vote up
public void render(ProfileElement element, PageContext context, RendererFilter filter)
		throws IOException {
	JspWriter out = context.getOut();
	
	//out.print(element.getName());
	//out.print(":");
	out.print("<select name=\"");
	out.print(element.getAbsoluteName());
	out.println("\">");
	out.print("<option value=\"true\"");
	if(element.getValue().equals(Boolean.TRUE)) {
		out.print(" SELECTED ");
	}
	out.println(">true</option>");
	out.print("<option value=\"false\"");
	if(element.getValue().equals(Boolean.FALSE)) {
		out.print(" SELECTED ");
	}
	out.println(">false</false>");
	out.print("</select><br/>");
}
 
Example 4
Source File: DynamicReadOnlyRender.java    From kfs with GNU Affero General Public License v3.0 5 votes vote down vote up
/**
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();

    try {
        String value = discoverRenderValue();            
        out.write(buildBeginSpan());
        
        if (!StringUtils.isEmpty(value)) {
            if (shouldRenderInquiryLink()) {
                out.write(buildBeginInquiryLink());
            }                
            out.write(value);                
            if (shouldRenderInquiryLink()) {
                out.write(buildEndInquiryLink());
            }                                
        } else {
            out.write(buildNonBreakingSpace());
        }
        
        out.write(buildEndSpan());
        renderShadowInputTag(pageContext, parentTag);
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering read only field", ioe);
    }
}
 
Example 5
Source File: TestPageContextImpl.java    From Tomcat8-Source-Read with MIT License 5 votes vote down vote up
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(
            this, req, resp, null, false, JspWriter.DEFAULT_BUFFER, true);
    JspWriter out = pageContext.getOut();
    if (Constants.DEFAULT_BUFFER_SIZE == out.getBufferSize()) {
        resp.getWriter().println("OK");
    } else {
        resp.getWriter().println("FAIL");
    }
}
 
Example 6
Source File: OverrideFieldRenderer.java    From kfs with GNU Affero General Public License v3.0 5 votes vote down vote up
/**
 * Renders the override field as non-hidden (probably a checkbox) 
 * @param pageContext the page context to render to
 * @param parentTag the tag requesting all this rendering
 * @throws JspException thrown if rendering fails
 */
protected void renderOverrideAsNonHidden(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    try {
        out.write(buildLineBreak());
        openNoWrapSpan(pageContext, parentTag);
        out.write(buildLabelSpanOpening());
        overrideLabelRenderer.setLabel(getField().getFieldLabel());
        overrideLabelRenderer.setRequired(true);
        overrideLabelRenderer.setReadOnly(false);
        overrideLabelRenderer.setLabelFor(getField().getPropertyPrefix()+"."+getField().getPropertyName());
        overrideLabelRenderer.render(pageContext, parentTag);
        out.write(buildLabelSpanClosing());
        out.write(buildNonBreakingSpace());
        overrideFieldRenderer =  readOnly ? new ReadOnlyRenderer() : SpringContext.getBean(AccountingLineRenderingService.class).getFieldRendererForField(getField(), accountingLine);
        if (overrideFieldRenderer instanceof ReadOnlyRenderer) {
            ((ReadOnlyRenderer)overrideFieldRenderer).setShouldRenderInquiry(false);
            out.write(": "); // add a colon to make it prettier
            // populate the field again
            getField().setPropertyValue(storedFieldValue);
        }
        overrideFieldRenderer.setField(getField());
        overrideFieldRenderer.setArbitrarilyHighTabIndex(getQuickfinderTabIndex());
        overrideFieldRenderer.render(pageContext, parentTag);
        closeNoWrapSpan(pageContext, parentTag);
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering override field", ioe);
    }
}
 
Example 7
Source File: JspUtils.java    From velocity-tools with Apache License 2.0 5 votes vote down vote up
/**
 * Executes a {@link Tag}.
 *
 * @param context The directive context.
 * @param node The main node of the directive.
 * @param pageContext The page context.
 * @param tag The tag to execute.
 * @throws JspException If something goes wrong.
 */
public static void executeTag(InternalContextAdapter context, Node node,
        PageContext pageContext, Tag tag) throws JspException
{
    int result = tag.doStartTag();
    if (tag instanceof BodyTag)
    {
        BodyTag bodyTag = (BodyTag) tag;
        BodyContent bodyContent = new VelocityBodyContent(
                pageContext.getOut(), (ASTBlock) node.jjtGetChild(1),
                context);
        switch (result)
        {
        case BodyTag.EVAL_BODY_BUFFERED:
            bodyTag.setBodyContent(bodyContent);
            bodyTag.doInitBody();
        case BodyTag.EVAL_BODY_INCLUDE:
            bodyContent.getString();
        default:
            break;
        }
        while (bodyTag.doAfterBody() == BodyTag.EVAL_BODY_AGAIN) {
            bodyContent.getString();
        }
    }
    tag.doEndTag();
}
 
Example 8
Source File: AccountingLineTableHeaderRenderer.java    From kfs with GNU Affero General Public License v3.0 5 votes vote down vote up
/**
 * Renders the header for the accounting line table to the screen
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    
    try {
        out.write(buildDivStart());
        out.write(buildTableStart());
        out.write(buildSubheadingWithDetailToggleRowBeginning());
        renderHideDetails(pageContext, parentTag);
        out.write(buildSubheadingWithDetailToggleRowEnding());
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering AccountingLineTableHeader", ioe);
    }
}
 
Example 9
Source File: AccountingLineTableFooterRenderer.java    From kfs with GNU Affero General Public License v3.0 5 votes vote down vote up
/**
 * Renders the table footer
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    
    try {
        out.write(buildTableEnd());
        out.write(buildKualiElementsNotifier());
        out.write(buildDivEnd());
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering accounting line table footer", ioe);
    }
}
 
Example 10
Source File: ExtendedTagSupport.java    From entando-core with GNU Lesser General Public License v3.0 5 votes vote down vote up
public static void out(PageContext pageContext, boolean escapeXml, Object obj) throws IOException {
	if (null != obj) {
		String text = (escapeXml) ? StringEscapeUtils.escapeXml(obj.toString()) : obj.toString();
		JspWriter w = pageContext.getOut();
		w.write(text);
	}
}
 
Example 11
Source File: TextFieldRenderer.java    From webcurator with Apache License 2.0 5 votes vote down vote up
public void render(ProfileElement element, PageContext context, RendererFilter filter)
		throws IOException {
	JspWriter out = context.getOut();

	out.print("<textarea name=\"");
	out.print(element.getAbsoluteName());
	out.print("\">");
	out.print(element.getValue());
	out.print("</textarea><br/>");
}
 
Example 12
Source File: OptionRenderer.java    From webcurator with Apache License 2.0 5 votes vote down vote up
public void render(ProfileElement element, PageContext context, RendererFilter filter) throws IOException {
	JspWriter out = context.getOut();
	
	//out.print(element.getName());
	//out.print(":");
	if (((SimpleProfileElement) element).isTransient()) {
		out.println(element.getValue()+"<br/>\n");
	} else {
		out.print("<select name=\"");
		out.print(element.getAbsoluteName());
		out.println("\">");
		
		// Get the options.
		SimpleProfileElement simpleElement = (SimpleProfileElement) element;
		Object[] legalValues = simpleElement.getLegalValues();
		
        //Have legal values. Build combobox.
        for(int i=0 ; i < legalValues.length ; i++){
            out.print("<option value=\""+legalValues[i]+"\"");
            if(element.getValue().equals(legalValues[i])){
                out.print(" selected");
            }
            out.println(">"+legalValues[i]+"</option>\n");
        }
        out.println("</select><br/>\n");		
	}
}
 
Example 13
Source File: ListTypeRenderer.java    From webcurator with Apache License 2.0 5 votes vote down vote up
public void render(ProfileElement element, PageContext context, RendererFilter filter) throws IOException {
	JspWriter out = context.getOut();
	
	ListType list = (ListType) element.getValue();

	out.println("<input type=\"hidden\" name=\"" + element.getAbsoluteName() + "\" id=\"" + element.getAbsoluteName() + "\">");
	out.println("<select multiple id=\"" + element.getAbsoluteName() + ".list\" size=\"5\" style=\"width: 500px\">");
	for(int i=0 ; i<list.size() ; i++){
           out.println("<option value='" + list.get(i) +"'>"+list.get(i)+"</option>");
       }
	out.println("</select>");

	out.println("<a  onclick=\"removeFromList('"+element.getAbsoluteName()+"');\"><image src=\"images/action-icon-delete.gif\" alt=\"Remove\"></a><br/>");
	
	out.print("<input id=\"");
	out.print(element.getAbsoluteName() + ".new");
	out.print("\" type=\"text\">");
	out.println("<a onclick=\"addToList('"+element.getAbsoluteName()+"');\"><image src=\"images/subtabs-add-btn.gif\" style=\"vertical-align: bottom\" alt=\"Add\"></a>");

	
	// Set the text field.
	out.println("<script>");
	out.println("var val = document.getElementById('" + element.getAbsoluteName() + "').value;");
	for(int i=0 ; i<list.size() ; i++){
		if( i == 0) { 
			out.println("val = val + '" + TextUtils.escapeForHTMLJavascript(list.get(i).toString()) + "';");
		}
		else {
			out.println("val = val + '\\n' + '" + TextUtils.escapeForHTMLJavascript(list.get(i).toString()) +"';");
		}
       }
	out.println("document.getElementById('" + element.getAbsoluteName() + "').value = val;");		
	out.println("</script>");
	
	out.println("<br/>");
	
}
 
Example 14
Source File: SimpleMapRenderer.java    From webcurator with Apache License 2.0 5 votes vote down vote up
public void render(ProfileElement element, PageContext context, RendererFilter filter) throws IOException {
	// Get the writer.
	JspWriter out = context.getOut();
	
	out.println("<div class=\"profileMainHeading\">" + element.getName() + "</div>");
	out.println("<div class=\"profileSublevel\">");
	
	ComplexProfileElement complexElement = (ComplexProfileElement) element;
	
	// Render the component to add new items.
	
	out.println("<table><tr><td>");
	
	out.println("<input type=\"text\" name=\"" + element.getAbsoluteName() + ".key\">");
	
	out.println("</td><td>--&gt;</td><td>");
	
	out.println("<input type=\"text\" name=\"" + element.getAbsoluteName() + ".value\">");
	out.println("</td><td>");
	out.println("<input type=\"image\" src=\"images/subtabs-add-btn.gif\" style=\"vertical-align: bottom\" onclick=\"simpleMapAdd('"+ element.getAbsoluteName()+"');\">");
	
	out.println("</td></tr>");
	
	// Render the items in the map.
	for(ProfileElement p: complexElement.getSimpleChildren()) {
		out.println("<tr><td>");
		out.print(p.getName());
		out.println("</td><td>--&gt;</td><td>");
		out.println(p.getValue());
		out.println("</td><td>");
		out.print("<a href=\"javascript:mapAction('"+complexElement.getAbsoluteName()+"','"+p.getName()+"','remove')\">Remove</a>");
		out.println("</td></tr>");
	}
	
	out.println("</table>");
	out.println("</div>");
}
 
Example 15
Source File: ConfigTagHelper.java    From spacewalk with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Helper Method to write a string to the jsp stream..
 * @param str string to write
 * @param pageContext the page context object
 * @throws JspException in the case of an io exception
 */
 static  void write(String str, PageContext pageContext) throws JspException {
    JspWriter writer = pageContext.getOut();
    try {
        writer.write(str);
    }
    catch (IOException e) {
        throw new JspException(e);
    }
}
 
Example 16
Source File: ListTagUtil.java    From uyuni with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Writes arbitrary text to the client (browser)
 * @param ctx caller's page context
 * @param text text to write
 * @throws JspException if an error occurs
 */
public static void write(PageContext ctx, String text) throws JspException {
    if (text == null) {
        text = "null";
    }
    Writer writer = ctx.getOut();
    try {
        writer.write(text);
    }
    catch (IOException e) {
        throw new JspException(e);
    }
}
 
Example 17
Source File: ConfigTagHelper.java    From uyuni with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Helper Method to write a string to the jsp stream..
 * @param str string to write
 * @param pageContext the page context object
 * @throws JspException in the case of an io exception
 */
 static  void write(String str, PageContext pageContext) throws JspException {
    JspWriter writer = pageContext.getOut();
    try {
        writer.write(str);
    }
    catch (IOException e) {
        throw new JspException(e);
    }
}
 
Example 18
Source File: DebitCreditTotalRenderer.java    From kfs with GNU Affero General Public License v3.0 4 votes vote down vote up
/**
 * Uses a Struts write tag to dump out the total
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    
    try {
        out.write("<tr>");
        
        final int emptyCellSpanBefore = this.getColumnNumberOfRepresentedCell() - 1;
        out.write("<td  class=\"total-line\" colspan=\"");
        out.write(Integer.toString(emptyCellSpanBefore));
        out.write("\">&nbsp;</td>");
        
        out.write("<td class=\"total-line\" style=\"border-left: 0px; white-space:nowrap;\">");            
        out.write("<strong>");
        
        out.write(SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(debitTotalLabelProperty));
        out.write("&nbsp;");
        
        debitWriteTag.setPageContext(pageContext);
        debitWriteTag.setParent(parentTag);
        debitWriteTag.setProperty(debitTotalProperty);
        debitWriteTag.doStartTag();
        debitWriteTag.doEndTag();
        
        out.write("</strong>");            
        out.write("</td>");
        
        out.write("<td class=\"total-line\" style=\"border-left: 0px; white-space:nowrap;\">");            
        out.write("<strong>");
        
        out.write(SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(creditTotalLabelProperty));
        out.write("&nbsp;");
        
        creditWriteTag.setPageContext(pageContext);
        creditWriteTag.setParent(parentTag);
        creditWriteTag.setProperty(creditTotalProperty);
        creditWriteTag.doStartTag();
        creditWriteTag.doEndTag();
        
        out.write("</strong>");            
        out.write("</td>");
        
        final int emptyCellSpanAfter = this.getCellCount() - this.getColumnNumberOfRepresentedCell() - 1;
        if(emptyCellSpanAfter > 0) {
            out.write("<td class=\"total-line\" style=\"border-left: 0px;\" colspan=\"");
            out.write(Integer.toString(emptyCellSpanAfter));
            out.write("\">&nbsp;</td>");
        }
        
        out.write("</tr>");
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering debit credit totals", ioe);
    }
}
 
Example 19
Source File: GroupTitleLineRenderer.java    From kfs with GNU Affero General Public License v3.0 4 votes vote down vote up
/**
 * Oy, the big one...this one actually renders instead of returning the HTML in a String. This is because it's kind of complex
 * (and a likely target for future refactoring)
 *
 * @param pageContext the page contex to render to
 * @param parentTag the tag that is requesting all the rendering
 * @throws JspException thrown if something goes wrong
 */
protected void renderUploadCell(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();

    if (canUpload()) {
        try {
            String hideImport = getHideImportName();
            String showImport = getShowImportName();
            String showLink = getShowLinkName();
            String uploadDiv = getUploadDivName();

            out.write("\n<SCRIPT type=\"text/javascript\">\n");
            out.write("<!--\n");
            out.write("\tfunction " + hideImport + "(showLinkId, uploadDivId) {\n");
            out.write("\t\tdocument.getElementById(showLinkId).style.display=\"inline\";\n");
            out.write("\t\tdocument.getElementById(uploadDivId).style.display=\"none\";\n");
            out.write("\t}\n");
            out.write("\tfunction " + showImport + "(showLinkId, uploadDivId) {\n");
            out.write("\t\tdocument.getElementById(showLinkId).style.display=\"none\";\n");
            out.write("\t\tdocument.getElementById(uploadDivId).style.display=\"inline\";\n");
            out.write("\t}\n");
            out.write("\tdocument.write(\n");
            out.write("\t\t'<a id=\"" + showLink + "\" href=\"#\" onclick=\"" + showImport + "(\\\'" + showLink + "\\\',\\\'" + uploadDiv + "\\\');return false;\">' +\n");
            out.write("\t\t'<img src=\"" + SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString("externalizable.images.url") + "tinybutton-importlines.gif\" title=\"import file\" alt=\"import file\"' +\n");
            out.write("\t\t'width=\"72\" border=\"0\">' +\n");
            out.write("\t\t'</a>' +\n");
            out.write("\t\t'<div id=\"" + uploadDiv + "\" style=\"display:none;\" >' +\n");

            out.write("\t\t'");

            scriptFileTag.setPageContext(pageContext);
            scriptFileTag.setParent(parentTag);
            String index = StringUtils.substringBetween(getLineCollectionProperty(), "[", "]");
            if (StringUtils.isNotBlank(index) && getLineCollectionProperty().contains("transactionEntries")) {
                scriptFileTag.setProperty(StringUtils.substringBeforeLast(getLineCollectionProperty(), ".") + "." + accountingLineGroupDefinition.getImportedLinePropertyPrefix() + "File");
            }
            else {
                scriptFileTag.setProperty(accountingLineGroupDefinition.getImportedLinePropertyPrefix() + "File");
            }
            scriptFileTag.doStartTag();
            scriptFileTag.doEndTag();

            out.write("' +\n");
            out.write("\t\t'");

            uploadButtonTag.setPageContext(pageContext);
            uploadButtonTag.setParent(parentTag);
            uploadButtonTag.setProperty("methodToCall.upload" + StringUtils.capitalize(accountingLineGroupDefinition.getImportedLinePropertyPrefix()) + "Lines" + "." + getLineCollectionProperty());
            uploadButtonTag.setAlt("insert " + accountingLineGroupDefinition.getGroupLabel() + " accounting lines");
            uploadButtonTag.setTitle("insert " + accountingLineGroupDefinition.getGroupLabel() + " accounting lines");
            uploadButtonTag.doStartTag();
            uploadButtonTag.doEndTag();

            out.write("' +\n");

            out.write("\t\t'");

            cancelButtonTag.setPageContext(pageContext);
            cancelButtonTag.setParent(parentTag);
            cancelButtonTag.setAlt("Cancel import of " + accountingLineGroupDefinition.getGroupLabel() + " accounting lines");
            cancelButtonTag.setTitle("Cancel import of " + accountingLineGroupDefinition.getGroupLabel() + " accounting lines");
            cancelButtonTag.setOnclick(getHideImportName() + "(\\\'" + showLink + "\\\',\\\'" + uploadDiv + "\\\');return false;");
            cancelButtonTag.doStartTag();
            cancelButtonTag.doEndTag();

            out.write("' +\n");

            out.write("\t'</div>');\n");
            out.write("\t//-->\n");
            out.write("</SCRIPT>\n");
            out.write("<NOSCRIPT>\n");
            out.write("\tImport " + accountingLineGroupDefinition.getGroupLabel() + " lines\n");

            noscriptFileTag.setPageContext(pageContext);
            noscriptFileTag.setParent(parentTag);
            noscriptFileTag.setProperty(accountingLineGroupDefinition.getImportedLinePropertyPrefix() + "File");
            noscriptFileTag.doStartTag();
            noscriptFileTag.doEndTag();

            uploadButtonTag.doStartTag();
            uploadButtonTag.doEndTag();

            out.write("</NOSCRIPT>\n");
        }
        catch (IOException ioe) {
            throw new JspException("Difficulty rendering accounting lines import upload", ioe);
        }
    }
}
 
Example 20
Source File: GroupTotalRenderer.java    From kfs with GNU Affero General Public License v3.0 4 votes vote down vote up
/**
 * Uses a Struts write tag to dump out the total
 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
 */
public void render(PageContext pageContext, Tag parentTag) throws JspException {
    JspWriter out = pageContext.getOut();
    
    try {
        out.write("<tr>");
        
        final int emptyCellSpanBefore = this.getColumnNumberOfRepresentedCell() - 1;
        out.write("<td  class=\"total-line\" colspan=\"");
        out.write(Integer.toString(emptyCellSpanBefore));
        out.write("\">&nbsp;</td>");
        
        out.write("<td class=\"total-line\" style=\"border-left: 0px;\">");
        
        out.write("<strong>");
        
        out.write(SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(totalLabelProperty));
        out.write("&nbsp;");
        
        writeTag.setPageContext(pageContext);
        writeTag.setParent(parentTag);
        writeTag.setProperty(getTotalProperty());
        writeTag.doStartTag();
        writeTag.doEndTag();
        
        out.write("</strong>");
        
        out.write("</td>");
        
        final int emptyCellSpanAfter = this.getCellCount() - this.getColumnNumberOfRepresentedCell();
        if(emptyCellSpanAfter > 0) {
            out.write("<td class=\"total-line\" style=\"border-left: 0px;\" colspan=\"");
            out.write(Integer.toString(emptyCellSpanAfter));
            out.write("\">&nbsp;</td>");
        }
        
        out.write("</tr>");
    }
    catch (IOException ioe) {
        throw new JspException("Difficulty rendering group total", ioe);
    }
}