⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writetag.java

📁 java论坛
💻 JAVA
字号:
package com.laoer.bbscs.web.taglib;

import java.math.*;
import java.text.*;
import java.util.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

import org.apache.struts.taglib.*;
import org.apache.struts.util.*;

/**
 * <p>Title: Tianyi BBS</p>
 *
 * <p>Description: BBSCS</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: Laoer.com</p>
 *
 * @author Gong Tianyi
 * @version 7.0
 */
public class WriteTag
    extends TagSupport {

  /**
   * The key to search default format string for java.sql.Timestamp in resources.
   */
  public static final String SQL_TIMESTAMP_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.sql.timestamp";

  /**
   * The key to search default format string for java.sql.Date in resources.
   */
  public static final String SQL_DATE_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.sql.date";

  /**
   * The key to search default format string for java.sql.Time in resources.
   */
  public static final String SQL_TIME_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.sql.time";

  /**
   * The key to search default format string for java.util.Date in resources.
   */
  public static final String DATE_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.date";

  /**
   * The key to search default format string for int (byte, short, etc.) in resources.
   */
  public static final String INT_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.int";

  /**
   * The key to search default format string for float (double, BigDecimal) in
   * resources.
   */
  public static final String FLOAT_FORMAT_KEY =
      "org.apache.struts.taglib.bean.format.float";

  /**
   * The message resources for this package.
   */
  protected static MessageResources messages =
      MessageResources.getMessageResources(
          "org.apache.struts.taglib.bean.LocalStrings");

// ------------------------------------------------------------- Properties

  /**
   * Filter the rendered output for characters that are sensitive in HTML?
   */
  protected boolean filter = true;

  public boolean getFilter() {
    return (this.filter);
  }

  public void setFilter(boolean filter) {
    this.filter = filter;
  }

  /**
   * Should we ignore missing beans and simply output nothing?
   */
  protected boolean ignore = false;

  public boolean getIgnore() {
    return (this.ignore);
  }

  public void setIgnore(boolean ignore) {
    this.ignore = ignore;
  }

  /**
   * Name of the bean that contains the data we will be rendering.
   */
  protected String name = null;

  public String getName() {
    return (this.name);
  }

  public void setName(String name) {
    this.name = name;
  }

  /**
   * Name of the property to be accessed on the specified bean.
   */
  protected String property = null;

  public String getProperty() {
    return (this.property);
  }

  public void setProperty(String property) {
    this.property = property;
  }

  /**
   * The scope to be searched to retrieve the specified bean.
   */
  protected String scope = null;

  public String getScope() {
    return (this.scope);
  }

  public void setScope(String scope) {
    this.scope = scope;
  }

  /**
   * The format string to be used as format to convert
   * value to String.
   */
  protected String formatStr = null;

  public String getFormat() {
    return (this.formatStr);
  }

  public void setFormat(String formatStr) {
    this.formatStr = formatStr;
  }

  /**
   * The key to search format string in applciation resources
   */
  protected String formatKey = null;

  public String getFormatKey() {
    return (this.formatKey);
  }

  public void setFormatKey(String formatKey) {
    this.formatKey = formatKey;
  }

  /**
   * The session scope key under which our Locale is stored.
   */
  protected String localeKey = null;

  public String getLocale() {
    return (this.localeKey);
  }

  public void setLocale(String localeKey) {
    this.localeKey = localeKey;
  }

  /**
   * The servlet context attribute key for our resources.
   */
  protected String bundle = null;

  private boolean userBr = false;

  public String getBundle() {
    return (this.bundle);
  }

  public boolean getUserBr() {
    return userBr;
  }

  public void setBundle(String bundle) {
    this.bundle = bundle;
  }

  public void setUserBr(boolean userBr) {
    this.userBr = userBr;
  }

  // --------------------------------------------------------- Public Methods

  /**
   * Process the start tag.
   *
   * @exception JspException if a JSP exception has occurred
   */
  public int doStartTag() throws JspException {

    // Look up the requested bean (if necessary)
    if (ignore) {
      if (TagUtils.getInstance().lookup(pageContext, name, scope) == null) {
        return (SKIP_BODY); // Nothing to output
      }
    }

    // Look up the requested property value
    Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope);

    if (value == null) {
      return (SKIP_BODY); // Nothing to output
    }

    // Convert value to the String with some formatting
    String output = formatValue(value);

    //if (this.getUserBr()) {
    //  output = output.replaceAll("\n", "<BR/>");
    //}

    // Print this property value to our output writer, suitably filtered
    if (filter) {
      output = TagUtils.getInstance().filter(output);
      if (this.getUserBr()) {
        output = output.replaceAll("\n", "<BR/>");
      }
      TagUtils.getInstance().write(pageContext, output);
    }
    else {
      if (this.getUserBr()) {
        output = output.replaceAll("\n", "<BR/>");
      }
      TagUtils.getInstance().write(pageContext, output);
    }

    // Continue processing this page
    return (SKIP_BODY);

  }

  /**
   * Retrieve format string from message bundle and return null if
   * message not found or message string.
   *
   * @param formatKey value to use as key to search message in bundle
   * @exception JspException if a JSP exception has occurred
   */
  protected String retrieveFormatString(String formatKey) throws JspException {
    String result =
        TagUtils.getInstance().message(
            pageContext,
            this.bundle,
            this.localeKey,
            formatKey);

    if ( (result != null)
        && ! (result.startsWith("???") && result.endsWith("???"))) {

      return result;

    }
    else {
      return null;
    }

  }

  /**
   * Format value according to specified format string (as tag attribute or
   * as string from message resources) or to current user locale.
   *
   * When a format string is retrieved from the message resources,
   * <code>applyLocalizedPattern</code> is used. For more about localized
   * patterns, see
   * <http://www.dei.unipd.it/corsi/fi2ae-docs/source/jdk1.1.7/src/java/text/resources/>.
   * (To obtain the correct value for some characters, you may need to view
   * the file in a hex editor and then use the Unicode escape form in the
   * property resources file.)
   *
   * @param valueToFormat value to process and convert to String
   * @exception JspException if a JSP exception has occurred
   */
  protected String formatValue(Object valueToFormat) throws JspException {
    Format format = null;
    Object value = valueToFormat;
    Locale locale = TagUtils.getInstance().getUserLocale(pageContext, this.localeKey);
    boolean formatStrFromResources = false;
    String formatString = formatStr;

    // Return String object as is.
    if (value instanceof java.lang.String) {
      return (String) value;
    }
    else {

      // Try to retrieve format string from resources by the key from formatKey.
      if ( (formatString == null) && (formatKey != null)) {
        formatString = retrieveFormatString(this.formatKey);
        if (formatString != null) {
          formatStrFromResources = true;
        }
      }

      // Prepare format object for numeric values.
      if (value instanceof Number) {

        if (formatString == null) {
          if ( (value instanceof Byte)
              || (value instanceof Short)
              || (value instanceof Integer)
              || (value instanceof Long)
              || (value instanceof BigInteger)) {

            formatString = retrieveFormatString(INT_FORMAT_KEY);

          }
          else if (
              (value instanceof Float)
              || (value instanceof Double)
              || (value instanceof BigDecimal)) {

            formatString = retrieveFormatString(FLOAT_FORMAT_KEY);
          }

          if (formatString != null) {
            formatStrFromResources = true;
          }
        }

        if (formatString != null) {
          try {
            format = NumberFormat.getNumberInstance(locale);
            if (formatStrFromResources) {
              ( (DecimalFormat) format).applyLocalizedPattern(
                  formatString);
            }
            else {
              ( (DecimalFormat) format).applyPattern(formatString);
            }

          }
          catch (IllegalArgumentException e) {
            JspException ex =
                new JspException(
                    messages.getMessage("write.format", formatString));
            TagUtils.getInstance().saveException(pageContext, ex);
            throw ex;
          }
        }

      }
      else if (value instanceof java.util.Date) {

        if (formatString == null) {

          if (value instanceof java.sql.Timestamp) {
            formatString =
                retrieveFormatString(SQL_TIMESTAMP_FORMAT_KEY);

          }
          else if (value instanceof java.sql.Date) {
            formatString = retrieveFormatString(SQL_DATE_FORMAT_KEY);

          }
          else if (value instanceof java.sql.Time) {
            formatString = retrieveFormatString(SQL_TIME_FORMAT_KEY);

          }
          else if (value instanceof java.util.Date) {
            formatString = retrieveFormatString(DATE_FORMAT_KEY);
          }

        }

        if (formatString != null) {
          format = new SimpleDateFormat(formatString, locale);
        }
      }
    }

    if (format != null) {
      return format.format(value);
    }
    else {
      return value.toString();
    }

  }

  /**
   * Release all allocated resources.
   */
  public void release() {

    super.release();
    filter = true;
    ignore = false;
    name = null;
    property = null;
    scope = null;
    formatStr = null;
    formatKey = null;
    localeKey = null;
    bundle = null;

  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -