You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by Joe Germuska <Jo...@JGSullivan.com> on 2002/01/07 17:20:18 UTC

html:frame taglib class

I've implemented a simple taglib class to support URL rewriting for 
the <frame> tag.

It's a simple subclass of LinkTag overriding doStartTag to include 
added attributes and put the URI in "src" instead of "href".  It 
supports all of the attributes in HTML 4.0 
<http://www.w3.org/TR/REC-html40/present/frames.html#h-16.2.2>

One question I would consider open is how to best handle "longdesc" 
-- this is an HTML 4.0 attribute (which I'd never heard of before) 
which is supposed to take a URI.  I simply put it in as an attribute 
which would be copied over, but probably it should support all of the 
same URL rewriting that other URIs can get.  Coming up with a 
graceful solution to that is more than I have time for right now.

I wasn't sure how to submit the source to this list: as an 
attachment, or as content of a message, or what...  please advise.

Thanks,
	Joe

-- 
Joe Germuska
Lead Programmer
JGSullivan Interactive, Inc.
joe@jgsullivan.com	312/943-1600 x2488 (v)	312/943-9675 (f)
pagejoe@jgsullivan.com	312/907-7893 (m)	7183 (nextel private)

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: html:frame taglib class

Posted by Joe Germuska <jo...@germuska.com>.
>I've implemented a simple taglib class to support URL rewriting for 
>the <frame> tag.
>
>It's a simple subclass of LinkTag overriding doStartTag to include 
>added attributes and put the URI in "src" instead of "href".  It 
>supports all of the attributes in HTML 4.0 
><http://www.w3.org/TR/REC-html40/present/frames.html#h-16.2.2>
>
>One question I would consider open is how to best handle "longdesc" 
>-- this is an HTML 4.0 attribute (which I'd never heard of before) 
>which is supposed to take a URI.  I simply put it in as an attribute 
>which would be copied over, but probably it should support all of 
>the same URL rewriting that other URIs can get.  Coming up with a 
>graceful solution to that is more than I have time for right now.

Here is the code, followed by the <tag> fragment for struts-html.tld


--------begin (org.apache.struts.taglib.html) FrameTag.java -------------
package org.apache.struts.taglib.html;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionForwards;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.RequestUtils;
import org.apache.struts.util.ResponseUtils;

/**
  * Provide URL Rewriting for Frame tags.  The frame <code>src</code> attribute
  * value is constructed using the same attributes as those used in
  * <code>LinkTag</code> to render <code>href</code>.  Additionally, 
the HTML 4.0
  * frame tag attributes <code>noresize</code>, <code>scrolling</code>,
  * <code>marginheight</code>, <code>marginwidth</code>,
  * <code>frameborder</code>, and <code>longdesc</code> are supported. 
The frame
  * <code>name</code> attribute is rendered based on the <code>frameName</code>
  * property.
  *
  * Note that the value of <code>longdesc</code> is intended to be a URI, but
  * currently no rewriting is supported.  The attribute is set directly from
  * the property value.
  *
  * @author Joe Germuska
  */
public class FrameTag extends LinkTag
{


     /**
      * Render the appropriately encoded URI.
      *
      * @exception JspException if a JSP exception has occurred
      */
     public int doStartTag() throws JspException {

	// Generate the hyperlink URL
         Map params = RequestUtils.computeParameters
             (pageContext, paramId, paramName, paramProperty, paramScope,
              name, property, scope, transaction);
         String url = null;
         try {
             url = RequestUtils.computeURL(pageContext, forward, href,
                                           page, params, anchor, false);
         } catch (MalformedURLException e) {
             RequestUtils.saveException(pageContext, e);
             throw new JspException
                 (messages.getMessage("rewrite.url", e.toString()));
         }

	// Print this element to our output writer
         StringBuffer results = new StringBuffer("<frame ");
         results.append("src=\"");
         results.append(url);
         results.append("\"");
         if (frameName != null)
         {
            results.append(" name=\"");
            results.append(frameName);
            results.append("\"");
         }
         if (noresize != null)
         {
            results.append(" noresize");
         }
         if (scrolling != null)
         {
            results.append(" scrolling=\"");
            results.append(scrolling);
            results.append("\"");
         }
         if (marginheight != null)
         {
            results.append(" marginheight=\"");
            results.append(marginheight);
            results.append("\"");
         }
         if (marginwidth != null)
         {
            results.append(" marginwidth=\"");
            results.append(marginwidth);
            results.append("\"");
         }
         if (frameborder != null)
         {
            results.append(" frameborder=\"");
            results.append(frameborder);
            results.append("\"");
         }
         if (longdesc != null)
         {
            results.append(" longdesc=\"");
            results.append(frameborder);
            results.append("\"");
         }
         results.append(prepareStyles());
         results.append(">");
         ResponseUtils.write(pageContext,results.toString());

	// Skip the body of this tag
	return (SKIP_BODY);

     }

     /**
      * Ignore the end of this tag.
      *
      * @exception JspException if a JSP exception has occurred
      */
     public int doEndTag() throws JspException {

         return (EVAL_PAGE);

     }
   public String getNoresize()
   {
     return noresize;
   }
   public void setNoresize(String noresize)
   {
     this.noresize = noresize;
   }
   public void setScrolling(String scrolling)
   {
     this.scrolling = scrolling;
   }
   public String getScrolling()
   {
     return scrolling;
   }
   public void setMarginheight(String marginheight)
   {
     this.marginheight = marginheight;
   }
   public String getMarginheight()
   {
     return marginheight;
   }
   public void setMarginwidth(String marginwidth)
   {
     this.marginwidth = marginwidth;
   }
   public String getMarginwidth()
   {
     return marginwidth;
   }
   public void setFrameName(String frameName)
   {
     this.frameName = frameName;
   }
   public String getFrameName()
   {
     return frameName;
   }
   public void setFrameborder(String frameborder)
   {
     this.frameborder = frameborder;
   }
   public String getFrameborder()
   {
     return frameborder;
   }
   public void setLongdesc(String longdesc)
   {
     this.longdesc = longdesc;
   }
   public String getLongdesc()
   {
     return longdesc;
   }

   private String noresize;
   private String scrolling;
   private String marginheight;
   private String marginwidth;
   private String frameName;
   private String frameborder;
   private String longdesc;


}
------- end (org.apache.struts.taglib.html) FrameTag.java -------
------- begin fragment for struts-html.tld -------
<tag>
<name>frame</name>
<tagclass>org.apache.struts.taglib.html.FrameTag</tagclass>
<attribute>
<name>anchor</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>forward</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>href</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>frameName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>longdesc</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>page</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>paramId</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>paramName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>paramProperty</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>paramScope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>transaction</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>style</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>styleClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>styleId</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>title</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
------- begin fragment for struts-html.tld -------

-- 
--
* Joe Germuska    { joe@germuska.com }
"It's pitiful, sometimes, if they've got it bad. Their eyes get 
glazed, they go white, their hands tremble.... As I watch them I 
often feel that a dope peddler is a gentleman compared with the man 
who sells records."
	--Sam Goody, 1956
tune in posse radio: <http://www.live365.com/stations/289268>

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>