📄 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. */ protected 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 : tableTag.getProperties().getDefaultComparator(); 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; this.totaled = false; } /** * @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 + -