Open Source Repository

Home /jodd/jodd-3.3.2 | Repository Home


jodd/servlet/tag/UrlTag.java
// Copyright (c) 2003-2012, Jodd Team (jodd.org). All Rights Reserved.

package jodd.servlet.tag;

import jodd.servlet.URLCoder;
import jodd.servlet.URLBuilder;
import jodd.util.StringPool;

import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.DynamicAttributes;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;

/**
 * Url tag creates full URL.
 */
public class UrlTag extends SimpleTagSupport implements DynamicAttributes {

  protected String baseUrl;
  /**
   * Sets base url value.
   */
  public void set_(String value) {
    this.baseUrl = value;
  }

  protected String var;
  /**
   * Sets optional variable name.
   */
  public void set_var(String value) {
    this.var = value;
  }

  private List<String> attrs = new ArrayList<String>();
  public void setDynamicAttribute(String uri, String localName, Object value) {
    attrs.add(localName);
    attrs.add(value == null ? StringPool.EMPTY : value.toString());
  }

  @Override
  public void doTag() throws JspException {
    PageContext pageContext = (PageContextgetJspContext();
    URLBuilder urlBuilder = URLCoder.build(pageContext).path(baseUrl);
    for (int i = 0; i < attrs.size(); i += 2) {
      urlBuilder.param(attrs.get(i), attrs.get(i + 1));
    }

    if (var == null) {
      JspWriter out = pageContext.getOut();
      try {
        out.print(urlBuilder.toString());
      catch (IOException ioex) {
        // ignore
      }
    else {
      pageContext.setAttribute(var, urlBuilder.toString());
    }
  }
}