📄 columntag.java
字号:
/**
* setter for the "scope" tag attribute.
* @param value attribute value
*/
public void setScope(String value)
{
this.attributeMap.put(TagConstants.ATTRIBUTE_SCOPE, value);
}
/**
* setter for the "headerScope" tag attribute.
* @param value attribute value
*/
public void setHeaderScope(String value)
{
this.headerAttributeMap.put(TagConstants.ATTRIBUTE_SCOPE, value);
}
/**
* setter for the "maxLength" tag attribute.
* @param value attribute value
*/
public void setMaxLength(int value)
{
this.maxLength = value;
}
/**
* setter for the "maxWords" tag attribute.
* @param value attribute value
*/
public void setMaxWords(int value)
{
this.maxWords = value;
}
/**
* setter for the "style" tag attribute.
* @param value attribute value
*/
public void setStyle(String value)
{
this.attributeMap.put(TagConstants.ATTRIBUTE_STYLE, value);
}
/**
* setter for the "class" tag attribute.
* @param value attribute value
*/
public void setClass(String value)
{
this.attributeMap.put(TagConstants.ATTRIBUTE_CLASS, new MultipleHtmlAttribute(value));
}
/**
* setter for the "headerClass" tag attribute.
* @param value attribute value
*/
public void setHeaderClass(String value)
{
this.headerAttributeMap.put(TagConstants.ATTRIBUTE_CLASS, new MultipleHtmlAttribute(value));
}
/**
* setter for the "decorator" tag attribute.
* @param value attribute value
*/
public void setDecorator(String value)
{
this.decorator = value;
}
/**
* setter for the "sortProperty" tag attribute.
* @param value attribute value
*/
public void setSortProperty(String value)
{
this.sortProperty = value;
}
/**
* Looks up the parent table tag.
* @return a table tag instance.
*/
private TableTag getTableTag()
{
return (TableTag) findAncestorWithClass(this, TableTag.class);
}
/**
* Tag setter.
* @param media the space delimited list of supported types
*/
public void setMedia(String media)
{
MediaUtil.setMedia(this, media);
}
/**
* @see org.displaytag.util.MediaUtil.SupportsMedia#setSupportedMedia(java.util.List)
*/
public void setSupportedMedia(List media)
{
this.supportedMedia = media;
}
/**
* @see org.displaytag.util.MediaUtil.SupportsMedia#getSupportedMedia()
*/
public List getSupportedMedia()
{
return this.supportedMedia;
}
/**
* sets the name given to the server when sorting this column
* @param sortName name given to the server to sort this column
*/
public void setSortName(String sortName)
{
this.sortName = sortName;
}
/**
* sets the sorting order for the sorted column.
* @param value "ascending" or "descending"
* @throws InvalidTagAttributeValueException if value is not one of "ascending" or "descending"
*/
public void setDefaultorder(String value) throws InvalidTagAttributeValueException
{
this.defaultorder = SortOrderEnum.fromName(value);
if (this.defaultorder == null)
{
throw new InvalidTagAttributeValueException(getClass(), "defaultorder", value); //$NON-NLS-1$
}
}
/**
* 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.
* </p>
* @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();
}
/**
* Adds the current header to the table model calling addColumn in the parent table tag. This method should be
* called only at first iteration.
* @param tableTag parent table tag
* @throws DecoratorInstantiationException for error during column decorator instantiation
* @throws ObjectLookupException for errors in looking up values
*/
private void addHeaderToTable(TableTag tableTag) throws DecoratorInstantiationException, ObjectLookupException
{
// don't modify "title" directly
String evalTitle = this.title;
// title has precedence over titleKey
if (evalTitle == null && (this.titleKey != null || this.property != null))
{
// handle title i18n
evalTitle = tableTag.getProperties().geResourceProvider().getResource(
this.titleKey,
this.property,
tableTag,
this.pageContext);
}
HeaderCell headerCell = new HeaderCell();
headerCell.setHeaderAttributes((HtmlAttributeMap) this.headerAttributeMap.clone());
headerCell.setHtmlAttributes((HtmlAttributeMap) this.attributeMap.clone());
headerCell.setTitle(evalTitle);
headerCell.setSortable(this.sortable);
List decorators = new ArrayList();
// handle multiple chained decorators, whitespace separated
if (StringUtils.isNotEmpty(this.decorator))
{
String[] decoratorNames = StringUtils.split(this.decorator);
for (int j = 0; j < decoratorNames.length; j++)
{
decorators.add(tableTag.getProperties().getDecoratorFactoryInstance().loadColumnDecorator(
this.pageContext,
decoratorNames[j]));
}
}
// "special" decorators
if (this.escapeXml)
{
decorators.add(EscapeXmlColumnDecorator.INSTANCE);
}
if (this.autolink)
{
decorators.add(AutolinkColumnDecorator.INSTANCE);
}
if (StringUtils.isNotBlank(this.format))
{
decorators.add(new MessageFormatColumnDecorator(this.format, tableTag.getProperties().getLocale()));
}
headerCell.setColumnDecorators((DisplaytagColumnDecorator[]) decorators
.toArray(new DisplaytagColumnDecorator[decorators.size()]));
headerCell.setBeanPropertyName(this.property);
headerCell.setShowNulls(this.nulls);
headerCell.setMaxLength(this.maxLength);
headerCell.setMaxWords(this.maxWords);
headerCell.setGroup(this.group);
headerCell.setSortProperty(this.sortProperty);
headerCell.setTotaled(this.totaled);
Comparator headerComparator = (comparator != null) ? comparator : new DefaultComparator(Collator
.getInstance(tableTag.getProperties().getLocale()));
headerCell.setComparator(headerComparator);
headerCell.setDefaultSortOrder(this.defaultorder);
headerCell.setSortName(this.sortName);
// href and parameter, create link
if (this.href != null)
{
Href colHref;
// empty base url, use href with parameters from parent table
if (StringUtils.isEmpty(this.href.getBaseUrl()))
{
colHref = (Href) tableTag.getBaseHref().clone();
}
else
{
colHref = (Href) this.href.clone();
}
if (this.paramId != null)
{
// parameter value is in a different object than the iterated one
if (this.paramName != null || this.paramScope != null)
{
// create a complete string for compatibility with previous version before expression evaluation.
// this approach is optimized for new expressions, not for previous property/scope parameters
StringBuffer expression = new StringBuffer();
// append scope
if (StringUtils.isNotBlank(this.paramScope))
{
expression.append(this.paramScope).append("Scope.");
}
// base bean name
if (this.paramId != null)
{
expression.append(this.paramName);
}
else
{
expression.append(tableTag.getName());
}
// append property
if (StringUtils.isNotBlank(this.paramProperty))
{
expression.append('.').append(this.paramProperty);
}
// evaluate expression.
// note the value is fixed, not based on any object created during iteration
// this is here for compatibility with the old version mainly
Object paramValue = tableTag.evaluateExpression(expression.toString());
// add parameter
colHref.addParameter(this.paramId, paramValue);
}
else
{
// set id
headerCell.setParamName(this.paramId);
// set property
headerCell.setParamProperty(this.paramProperty);
}
}
// sets the base href
headerCell.setHref(colHref);
}
tableTag.addColumn(headerCell);
if (log.isDebugEnabled())
{
log.debug("columnTag.addHeaderToTable() :: first iteration - adding header " + headerCell);
}
}
/**
* @see javax.servlet.jsp.tagext.Tag#release()
*/
public void release()
{
super.release();
this.attributeMap.clear();
this.autolink = false;
this.decorator = null;
this.group = -1;
this.headerAttributeMap.clear();
this.href = null;
this.maxLength = 0;
this.maxWords = 0;
this.nulls = false;
this.paramId = null;
this.paramName = null;
this.paramProperty = null;
this.paramScope = null;
this.property = null;
this.sortable = false;
this.sortName = null;
this.supportedMedia = null;
this.title = null;
this.titleKey = null;
this.sortProperty = null;
this.comparator = null;
this.defaultorder = null;
this.escapeXml = false;
this.format = null;
this.value = null;
}
/**
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
*/
public int doStartTag() throws JspException
{
TableTag tableTag = getTableTag();
if (tableTag == null)
{
throw new TagStructureException(getClass(), "column", "table");
}
// If the list is empty, do not execute the body; may result in NPE
if (tableTag.isEmpty() || !tableTag.isIncludedRow())
{
return SKIP_BODY;
}
MediaTypeEnum currentMediaType = (MediaTypeEnum) this.pageContext.findAttribute(TableTag.PAGE_ATTRIBUTE_MEDIA);
if (!MediaUtil.availableForMedia(this, currentMediaType))
{
return SKIP_BODY;
}
return super.doStartTag();
}
/**
* @see java.lang.Object#toString()
*/
public String toString()
{
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) //
.append("bodyContent", this.bodyContent) //$NON-NLS-1$
.append("group", this.group) //$NON-NLS-1$
.append("maxLength", this.maxLength) //$NON-NLS-1$
.append("decorator", this.decorator) //$NON-NLS-1$
.append("href", this.href) //$NON-NLS-1$
.append("title", this.title) //$NON-NLS-1$
.append("paramScope", this.paramScope) //$NON-NLS-1$
.append("property", this.property) //$NON-NLS-1$
.append("paramProperty", this.paramProperty) //$NON-NLS-1$
.append("headerAttributeMap", this.headerAttributeMap) //$NON-NLS-1$
.append("paramName", this.paramName) //$NON-NLS-1$
.append("autolink", this.autolink) //$NON-NLS-1$
.append("format", this.format) //$NON-NLS-1$
.append("nulls", this.nulls) //$NON-NLS-1$
.append("maxWords", this.maxWords) //$NON-NLS-1$
.append("attributeMap", this.attributeMap) //$NON-NLS-1$
.append("sortable", this.sortable) //$NON-NLS-1$
.append("paramId", this.paramId) //$NON-NLS-1$
.append("alreadySorted", this.alreadySorted) //$NON-NLS-1$
.append("sortProperty", this.sortProperty) //$NON-NLS-1$
.append("defaultSortOrder", this.defaultorder) //$NON-NLS-1$
.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -