/** * Passes attribute information up to the parent TableTag. * * <p>When we hit the end of the tag, we simply let our parent (which better be a TableTag) know * what the user wants to do with this column. We do that by simple registering this tag with the * parent. This tag's only job is to hold the configuration information to describe this * particular column. The TableTag does all the work. * * @return int * @throws JspException if this tag is being used outside of a <display:list...> tag. * @see javax.servlet.jsp.tagext.Tag#doEndTag() */ public int doEndTag() throws JspException { TableTag tableTag = getTableTag(); MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA); if (currentMediaType != null && !MediaUtil.availableForMedia(this, currentMediaType)) { if (log.isDebugEnabled()) { log.debug("skipping column body, currentMediaType=" + currentMediaType); } return SKIP_BODY; } // add column header only once if (tableTag.isFirstIteration()) { addHeaderToTable(tableTag); } if (!tableTag.isIncludedRow()) { return super.doEndTag(); } Cell cell = null; if (this.property == null && this.value != null) { cell = new Cell(value); } else if (this.property == null && this.bodyContent != null) { cell = new Cell(this.bodyContent.getString()); } Object rowStyle = this.attributeMap.get(TagConstants.ATTRIBUTE_STYLE); Object rowClass = this.attributeMap.get(TagConstants.ATTRIBUTE_CLASS); if (rowStyle != null || rowClass != null) { HtmlAttributeMap perRowValues = new HtmlAttributeMap(); if (rowStyle != null) { perRowValues.put(TagConstants.ATTRIBUTE_STYLE, rowStyle); } if (rowClass != null) { perRowValues.put(TagConstants.ATTRIBUTE_CLASS, rowClass); } if (cell == null) { cell = new Cell(null); } cell.setPerRowAttributes(perRowValues); } tableTag.addCell(cell != null ? cell : Cell.EMPTY_CELL); // cleanup non-attribute variables this.alreadySorted = false; return super.doEndTag(); }