📄 htmltablewriter.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.render;import java.io.IOException;import java.text.MessageFormat;import java.util.Iterator;import java.util.Map;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import org.apache.commons.lang.ObjectUtils;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.displaytag.exception.DecoratorException;import org.displaytag.exception.ObjectLookupException;import org.displaytag.exception.WrappedRuntimeException;import org.displaytag.model.Column;import org.displaytag.model.HeaderCell;import org.displaytag.model.Row;import org.displaytag.model.TableModel;import org.displaytag.pagination.PaginatedList;import org.displaytag.pagination.SmartListHelper;import org.displaytag.properties.MediaTypeEnum;import org.displaytag.properties.SortOrderEnum;import org.displaytag.properties.TableProperties;import org.displaytag.tags.CaptionTag;import org.displaytag.tags.TableTagParameters;import org.displaytag.util.Anchor;import org.displaytag.util.Href;import org.displaytag.util.HtmlAttributeMap;import org.displaytag.util.ParamEncoder;import org.displaytag.util.PostHref;import org.displaytag.util.TagConstants;/** * A table writer that formats a table in HTML and writes it to a JSP page. * @author Fabrizio Giustina * @author Jorge L. Barroso * @version $Id$ * @see org.displaytag.render.TableWriterTemplate * @since 1.1 */public class HtmlTableWriter extends TableWriterAdapter{ /** * Logger. */ private static Log log = LogFactory.getLog(HtmlTableWriter.class); /** * <code>TableModel</code> */ private TableModel tableModel; /** * <code>TableProperties</code> */ private TableProperties properties; /** * Output destination. */ private JspWriter out; /** * The param encoder used to generate unique parameter names. Initialized at the first use of encodeParameter(). */ private ParamEncoder paramEncoder; /** * base href used for links. */ private Href baseHref; /** * add export links. */ private boolean export; private CaptionTag captionTag; /** * The paginated list containing the external pagination and sort parameters The presence of this paginated list is * what determines if external pagination and sorting is used or not. */ private PaginatedList paginatedList; /** * Used by various functions when the person wants to do paging. */ private SmartListHelper listHelper; /** * page size. */ private int pagesize; private HtmlAttributeMap attributeMap; /** * Unique table id. */ private String uid; /** * This table writer uses a <code>TableTag</code> and a <code>JspWriter</code> to do its work. * @param tableTag <code>TableTag</code> instance called back by this writer. * @param out The output destination. */ public HtmlTableWriter( TableModel tableModel, TableProperties tableProperties, Href baseHref, boolean export, JspWriter out, CaptionTag captionTag, PaginatedList paginatedList, SmartListHelper listHelper, int pagesize, HtmlAttributeMap attributeMap, String uid) { this.tableModel = tableModel; this.properties = tableProperties; this.baseHref = baseHref; this.export = export; this.out = out; this.captionTag = captionTag; this.paginatedList = paginatedList; this.listHelper = listHelper; this.pagesize = pagesize; this.attributeMap = attributeMap; this.uid = uid; } /** * Writes a banner containing search result and paging navigation above an HTML table to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeTopBanner(org.displaytag.model.TableModel) */ protected void writeTopBanner(TableModel model) { if (this.tableModel.getForm() != null) { String js = "<script type=\"text/javascript\">\n" + "function displaytagform(formname, fields){\n" + " var objfrm = document.forms[formname];\n" + " for (j=fields.length-1;j>=0;j--){var f= objfrm.elements[fields[j].f];if (f){f.value=fields[j].v};}\n" + " objfrm.submit();\n" + "}\n" + "</script>"; writeFormFields(); write(js); } writeSearchResultAndNavigation(); } /** * Writes an HTML table's opening tags to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeTableOpener(org.displaytag.model.TableModel) */ protected void writeTableOpener(TableModel model) { this.write(getOpenTag()); } private void writeFormFields() { Map parameters = baseHref.getParameterMap(); ParamEncoder pe = new ParamEncoder(this.tableModel.getId()); addIfMissing(parameters, pe.encodeParameterName(TableTagParameters.PARAMETER_ORDER)); addIfMissing(parameters, pe.encodeParameterName(TableTagParameters.PARAMETER_PAGE)); addIfMissing(parameters, pe.encodeParameterName(TableTagParameters.PARAMETER_SORT)); for (Iterator it = parameters.keySet().iterator(); it.hasNext();) { String key = (String) it.next(); Object value = parameters.get(key); if (value != null & value.getClass().isArray()) { Object[] arr = (Object[]) value; for (int j = 0; j < arr.length; j++) { writeField(key, arr[j]); } } else { writeField(key, value); } } } /** * @param key * @param value */ private void writeField(String key, Object value) { StringBuffer buffer = new StringBuffer(); buffer.append("<input type=\"hidden\" name=\""); buffer.append(esc(key)); buffer.append("\" value=\""); buffer.append(value); buffer.append("\"/>"); write(buffer.toString()); } private String esc(Object value) { String valueEscaped = StringUtils.replace(ObjectUtils.toString(value), "\"", "\\\""); return valueEscaped; } /** * Adds an element to the given map if empty (use an empty string as value) * @param parameters Map of parameters * @param key param key */ private void addIfMissing(Map parameters, String key) { if (!parameters.containsKey(key)) { parameters.put(key, StringUtils.EMPTY); } } /** * Writes an HTML table's caption to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeCaption(org.displaytag.model.TableModel) */ protected void writeCaption(TableModel model) { this.write(captionTag.getOpenTag() + model.getCaption() + captionTag.getCloseTag()); } /** * Writes an HTML table's footer to a JSP page; HTML requires tfoot to appear before tbody. * @see org.displaytag.render.TableWriterTemplate#writeFooter(org.displaytag.model.TableModel) */ protected void writePreBodyFooter(TableModel model) { this.write(TagConstants.TAG_TFOOTER_OPEN); this.write(model.getFooter()); this.write(TagConstants.TAG_TFOOTER_CLOSE); } /** * Writes the start of an HTML table's body to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeTableBodyOpener(org.displaytag.model.TableModel) */ protected void writeTableBodyOpener(TableModel model) { this.write(TagConstants.TAG_TBODY_OPEN); } /** * Writes the end of an HTML table's body to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeTableBodyCloser(org.displaytag.model.TableModel) */ protected void writeTableBodyCloser(TableModel model) { this.write(TagConstants.TAG_TBODY_CLOSE); } /** * Writes the closing structure of an HTML table to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeTableCloser(org.displaytag.model.TableModel) */ protected void writeTableCloser(TableModel model) { this.write(TagConstants.TAG_OPENCLOSING); this.write(TagConstants.TABLE_TAG_NAME); this.write(TagConstants.TAG_CLOSE); } /** * Writes a banner containing search result, paging navigation, and export links below an HTML table to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeBottomBanner(org.displaytag.model.TableModel) */ protected void writeBottomBanner(TableModel model) { writeNavigationAndExportLinks(); } /** * @see org.displaytag.render.TableWriterTemplate#writeDecoratedTableFinish(org.displaytag.model.TableModel) */ protected void writeDecoratedTableFinish(TableModel model) { model.getTableDecorator().finish(); } /** * @see org.displaytag.render.TableWriterTemplate#writeDecoratedRowStart(org.displaytag.model.TableModel) */ protected void writeDecoratedRowStart(TableModel model) { this.write(model.getTableDecorator().startRow()); } /** * Writes an HTML table's row-opening tag to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeRowOpener(org.displaytag.model.Row) */ protected void writeRowOpener(Row row) { this.write(row.getOpenTag()); } /** * Writes an HTML table's column-opening tag to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeColumnOpener(org.displaytag.model.Column) */ protected void writeColumnOpener(Column column) throws ObjectLookupException, DecoratorException { this.write(column.getOpenTag()); } /** * Writes an HTML table's column-closing tag to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeColumnCloser(org.displaytag.model.Column) */ protected void writeColumnCloser(Column column) { this.write(column.getCloseTag()); } /** * Writes to a JSP page an HTML table row that has no columns. * @see org.displaytag.render.TableWriterTemplate#writeRowWithNoColumns(java.lang.String) */ protected void writeRowWithNoColumns(String rowValue) { this.write(TagConstants.TAG_TD_OPEN); this.write(rowValue); this.write(TagConstants.TAG_TD_CLOSE); } /** * Writes an HTML table's row-closing tag to a JSP page. * @see org.displaytag.render.TableWriterTemplate#writeRowCloser(org.displaytag.model.Row) */ protected void writeRowCloser(Row row) { this.write(row.getCloseTag()); } /** * @see org.displaytag.render.TableWriterTemplate#writeDecoratedRowFinish(org.displaytag.model.TableModel) */ protected void writeDecoratedRowFinish(TableModel model) { this.write(model.getTableDecorator().finishRow()); } /** * Writes an HTML message to a JSP page explaining that the table model contains no data. * @see org.displaytag.render.TableWriterTemplate#writeEmptyListMessage(java.lang.String) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -