📄 columntag.java
字号:
/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.tags;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.displaytag.decorator.AutolinkColumnDecorator;
import org.displaytag.decorator.DisplaytagColumnDecorator;
import org.displaytag.decorator.EscapeXmlColumnDecorator;
import org.displaytag.decorator.MessageFormatColumnDecorator;
import org.displaytag.exception.DecoratorInstantiationException;
import org.displaytag.exception.InvalidTagAttributeValueException;
import org.displaytag.exception.ObjectLookupException;
import org.displaytag.exception.TagStructureException;
import org.displaytag.model.Cell;
import org.displaytag.model.DefaultComparator;
import org.displaytag.model.HeaderCell;
import org.displaytag.properties.MediaTypeEnum;
import org.displaytag.properties.SortOrderEnum;
import org.displaytag.util.DefaultHref;
import org.displaytag.util.Href;
import org.displaytag.util.HtmlAttributeMap;
import org.displaytag.util.MediaUtil;
import org.displaytag.util.MultipleHtmlAttribute;
import org.displaytag.util.TagConstants;
/**
* <p>
* This tag works hand in hand with the TableTag to display a list of objects. This describes a column of data in the
* TableTag. There can be any number of columns that make up the list.
* </p>
* <p>
* This tag does no work itself, it is simply a container of information. The TableTag does all the work based on the
* information provided in the attributes of this tag.
* <p>
* @author mraible
* @author Fabrizio Giustina
* @version $Revision: 1008 $ ($Author: fgiust $)
*/
public class ColumnTag extends BodyTagSupport implements MediaUtil.SupportsMedia
{
/**
* D1597A17A6.
*/
private static final long serialVersionUID = 899149338534L;
/**
* logger.
*/
private static Log log = LogFactory.getLog(ColumnTag.class);
/**
* html pass-through attributes for cells.
*/
private HtmlAttributeMap attributeMap = new HtmlAttributeMap();
/**
* html pass-through attributes for cell headers.
*/
private HtmlAttributeMap headerAttributeMap = new HtmlAttributeMap();
/**
* the property method that is called to retrieve the information to be displayed in this column. This method is
* called on the current object in the iteration for the given row. The property format is in typical struts format
* for properties (required)
*/
private String property;
/**
* the title displayed for this column. if this is omitted then the property name is used for the title of the
* column (optional).
*/
private String title;
/**
* by default, null values don't appear in the list, by setting viewNulls to 'true', then null values will appear as
* "null" in the list (mostly useful for debugging) (optional).
*/
private boolean nulls;
/**
* is the column sortable?
*/
private boolean sortable;
/**
* Name given to the server when sorting this column.
*/
private String sortName;
/**
* Defalt sort order for this column.
*/
private SortOrderEnum defaultorder;
/**
* The comparator to use when sorting this column.
*/
private Comparator comparator;
/**
* if set to true, then any email addresses and URLs found in the content of the column are automatically converted
* into a hypertext link.
*/
private boolean autolink;
/**
* Automatically escape column content for html and xml media.
*/
private boolean escapeXml;
/**
* A MessageFormat patter that will be used to decorate objects in the column. Can be used as a "shortcut" for
* simple column decorations.
*/
private String format;
/**
* the grouping level (starting at 1 and incrementing) of this column (indicates if successive contain the same
* values, then they should not be displayed). The level indicates that if a lower level no longer matches, then the
* matching for this higher level should start over as well. If this attribute is not included, then no grouping is
* performed. (optional)
*/
private int group = -1;
/**
* if this attribute is provided, then the data that is shown for this column is wrapped inside a <a href> tag
* with the url provided through this attribute. Typically you would use this attribute along with one of the
* struts-like param attributes below to create a dynamic link so that each row creates a different URL based on the
* data that is being viewed. (optional)
*/
private Href href;
/**
* The name of the request parameter that will be dynamically added to the generated href URL. The corresponding
* value is defined by the paramProperty and (optional) paramName attributes, optionally scoped by the paramScope
* attribute. (optional)
*/
private String paramId;
/**
* The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if
* paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if
* paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property,
* if it is specified. If paramName is omitted, then it is assumed that the current object being iterated on is the
* target bean. (optional)
*/
private String paramName;
/**
* The name of a property of the bean specified by the paramName attribute (or the current object being iterated on
* if paramName is not provided), whose return value must be a String containing the value of the request parameter
* (named by the paramId attribute) that will be dynamically added to this href URL. (optional)
* @deprecated use Expressions in paramName
*/
private String paramProperty;
/**
* The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes
* are searched. If paramName is not provided, then the current object being iterated on is assumed to be the target
* bean. (optional)
* @deprecated use Expressions in paramName
*/
private String paramScope;
/**
* If this attribute is provided, then the column's displayed is limited to this number of characters. An elipse
* (...) is appended to the end if this column is linked, and the user can mouseover the elipse to get the full
* text. (optional)
*/
private int maxLength;
/**
* If this attribute is provided, then the column's displayed is limited to this number of words. An elipse (...) is
* appended to the end if this column is linked, and the user can mouseover the elipse to get the full text.
* (optional)
*/
private int maxWords;
/**
* a class that should be used to "decorate" the underlying object being displayed. If a decorator is specified for
* the entire table, then this decorator will decorate that decorator. (optional)
*/
private String decorator;
/**
* is the column already sorted?
*/
private boolean alreadySorted;
/**
* The media supported attribute.
*/
private List supportedMedia;
/**
* Property in a resource bundle to be used as the title for the column.
*/
private String titleKey;
/**
* The name of the bean property if a decorator is used and sorting need to be still on on the property itself.
* Useful for displaying data with links but sorting on original value.
*/
private String sortProperty;
/**
* Should the value of the column be summed? Requires that the value of the column be convertible to a Number.
*/
private boolean totaled;
/**
* Static value for this cell, equivalent to column body.
*/
private Object value;
/**
* Setter for totals.
* @param totals the value
*/
public void setTotal(boolean totals)
{
this.totaled = totals;
}
/**
* setter for the "property" tag attribute.
* @param value attribute value
*/
public void setProperty(String value)
{
this.property = value;
}
/**
* setter for the "value" tag attribute.
* @param value attribute value
*/
public void setValue(Object value)
{
this.value = value;
}
/**
* Set the comparator, classname or object.
* @param comparatorObj the comparator, classname or object
*/
public void setComparator(Object comparatorObj)
{
// @todo don't do this! Setters should remains simple setters and any evaluation should be done in doEndTag()!
if (comparatorObj instanceof Comparator)
{
this.comparator = (Comparator) comparatorObj;
}
else if (comparatorObj instanceof String)
{
String comparatorClassname = (String) comparatorObj;
Class compClass;
try
{
compClass = Thread.currentThread().getContextClassLoader().loadClass(comparatorClassname);
}
catch (ClassNotFoundException e)
{
throw new RuntimeException("InstantiationException setting column comparator as "
+ comparatorClassname
+ ": "
+ e.getMessage(), e);
}
try
{
this.comparator = (Comparator) compClass.newInstance();
}
catch (InstantiationException e)
{
throw new RuntimeException("InstantiationException setting column comparator as "
+ comparatorClassname
+ ": "
+ e.getMessage(), e);
}
catch (IllegalAccessException e)
{
throw new RuntimeException("IllegalAccessException setting column comparator as "
+ comparatorClassname
+ ": "
+ e.getMessage(), e);
}
}
else
{
throw new IllegalArgumentException("Value for comparator: "
+ comparatorObj
+ " of type "
+ comparatorObj.getClass().getName());
}
}
/**
* setter for the "title" tag attribute.
* @param value attribute value
*/
public void setTitle(String value)
{
this.title = value;
}
/**
* setter for the "format" tag attribute.
* @param value attribute value
*/
public void setFormat(String value)
{
this.format = value;
}
/**
* setter for the "nulls" tag attribute.
* @param value attribute value
*/
public void setNulls(boolean value)
{
this.nulls = value;
}
/**
* setter for the "sortable" tag attribute.
* @param value attribute value
*/
public void setSortable(boolean value)
{
this.sortable = value;
}
/**
* setter for the "autolink" tag attribute.
* @param value attribute value
*/
public void setAutolink(boolean value)
{
this.autolink = value;
}
/**
* setter for the "escapeXml" tag attribute.
* @param value attribute value
*/
public void setEscapeXml(boolean value)
{
this.escapeXml = value;
}
/**
* setter for the "group" tag attribute.
* @param value attribute value
*/
public void setGroup(int value)
{
this.group = value;
}
/**
* setter for the "titleKey" tag attribute.
* @param value property name
*/
public void setTitleKey(String value)
{
this.titleKey = value;
}
/**
* setter for the "href" tag attribute.
* @param value attribute value
*/
public void setHref(String value)
{
// call encodeURL to preserve session id when cookies are disabled
String encodedHref = ((HttpServletResponse) this.pageContext.getResponse()).encodeURL(StringUtils
.defaultString(value));
this.href = new DefaultHref(encodedHref);
}
/**
* setter for the "url" tag attribute. This has the same meaning of href, but prepends the context path to the given
* URI.
* @param value attribute value
*/
public void setUrl(String value)
{
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
// call encodeURL to preserve session id when cookies are disabled
String encodedHref = ((HttpServletResponse) this.pageContext.getResponse()).encodeURL(StringUtils
.defaultString(req.getContextPath() + value));
this.href = new DefaultHref(encodedHref);
}
/**
* setter for the "paramId" tag attribute.
* @param value attribute value
*/
public void setParamId(String value)
{
this.paramId = value;
}
/**
* setter for the "paramName" tag attribute.
* @param value attribute value
*/
public void setParamName(String value)
{
this.paramName = value;
}
/**
* setter for the "paramProperty" tag attribute.
* @param value attribute value
*/
public void setParamProperty(String value)
{
this.paramProperty = value;
}
/**
* setter for the "paramScope" tag attribute.
* @param value attribute value
*/
public void setParamScope(String value)
{
this.paramScope = value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -