📄 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: 1097 $ ($Author: rapruitt $) */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 + -