Sorry, my mistake. (I hate mis-remembering code I wrote!) I should have
referenced 'equals' instead of '=='. However, what you have will work just
as well.

--
Martin Cooper


----- Original Message -----
From: "Matt Raible" <[EMAIL PROTECTED]>
To: "Struts Developers List" <[EMAIL PROTECTED]>
Sent: Tuesday, November 13, 2001 8:35 AM
Subject: RE: Converting struts-html tags to be XHTML-compliant


> I got this to work, thanks.
>
> However, I was not able to follow Martin's advice and do the following
> comparison:
>
> if (xhtml != null && (xhtml == Boolean.TRUE))
>
> I had to do the following:
>
> if (xhtml != null && xhtml.booleanValue())
>
> Just an FYI...
>
> Thanks,
>
> Matt
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Monday, November 12, 2001 6:59 PM
> To: Struts Developers List; [EMAIL PROTECTED]
> Subject: RE: Converting struts-html tags to be XHTML-compliant
>
>
> What you're seeing is probably a result of cache updating issues. I don't
> recall the exact details, but I believe there are documented (in the JSP
> spec) points where various caches are updated, and you're most likely
> falling foul of this.
>
> To avoid problems, you should set the attribute using:
>
>      pageContext.setAttribute(Constants.XHTML_KEY,
>          new Boolean(xhtml),
>          PageContext.REQUEST_SCOPE);
>
> and retrieve it using:
>
>      pageContext.getAttribute(Constants.XHTML_KEY,
>          PageContext.REQUEST_SCOPE);
>
> Also, in the doEndTag() method of HtmlTag, you should remove it using:
>
>      pageContext.removeAttribute(Constants.XHTML_KEY,
>          PageContext.REQUEST_SCOPE);
>
> Note that I used Constants.XHTML_KEY in the above - the constant value for
> this should be in class org.apache.struts.taglib.html.Constants.
>
> --
> Martin Cooper
>
>
> At 03:56 PM 11/12/01, Matt Raible wrote:
> >So based on Hal (and Martin's advice), I have attempted to implement the
> >following:
> >
> >in HtmlTag.java, added to end of doStartTag() method:
> >
> >         // Get the request from the page context
> >         HttpServletRequest request =
> >                 (HttpServletRequest) pageContext.getRequest();
> >
> >         // Set the XHTML attribute
> >         request.setAttribute(Action.XHTML_KEY, new Boolean(xhtml));
> >
> >and after adding System.out.println's, I know this is getting set
> correctly.
> >
> >HOWEVER, in the FormTag, where I'm trying to grab this attribute, it's
not
> >working at all:
> >
> >         // Get the request from the page context
> >         HttpServletRequest request =
> >                 (HttpServletRequest) pageContext.getRequest();
> >
> >         Boolean xhtml = (Boolean)
request.getAttribute(Action.XHTML_KEY);
> >
> >If I print the "xhtml" value in FormTag, it's null.
> >
> >This all seems like pretty straight forward stuff, so don't know why it's
> >not working.
> >
> >Do I have to do something like pageContext.setAttribute(name, obj,
> >PageContext.REQUEST_SCOPE)?  This doesn't seem to work either?
> >
> >Thanks guys,
> >
> >Matt
> >
> >-----Original Message-----
> >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> >Sent: Monday, November 12, 2001 4:03 PM
> >To: Struts Developers List
> >Subject: Re: Converting struts-html tags to be XHTML-compliant
> >
> >
> >Using findAncestorWithClass() is tempting, because it's simple and clean.
> >However, it causes problems with included pages, because it doesn't work
> >across page boundaries. Using page context has a similar problem, as Hal
> >Deadman points out.
> >
> >Prior to Struts 1.0, Struts used to use page context (I don't know if it
> >ever used findAncestorWithClass()). However, that was changed to use
> >request context, to avoid the issues described above.
> >
> >Particularly since this is going to be a property of the outermost
(X)HTML
> >tag, I would encourage the use of request scope, for maximum flexibility.
> >
> >Something else I would recommend is that the property tested by other
tags
> >(i.e. the request attribute) be a Boolean instead of a String. Then you
can
> >use Boolean.TRUE and Boolean.FALSE objects, compare them directly using
> >'==', and avoid costly string conversions.
> >
> >Finally, I don't believe there's a need for an HtmlTei class. That should
> >eliminate the source of the problem you're having. ;-)
> >
> >--
> >Martin Cooper
> >
> >
> >At 01:57 PM 11/12/01, Craig R. McClanahan wrote:
> >
> >
> > >On Sun, 11 Nov 2001, Matt Raible wrote:
> > >
> > > > Date: Sun, 11 Nov 2001 22:00:40 -0700
> > > > From: Matt Raible <[EMAIL PROTECTED]>
> > > > Reply-To: Struts Developers List <[EMAIL PROTECTED]>
> > > > To: [EMAIL PROTECTED]
> > > > Subject: Converting struts-html tags to be XHTML-compliant
> > > >
> > > > I am taking on the project of converting (with backwards
> compatibility)
> >all
> > > > the struts-html tags to be XHTML-compliant.
> > > >
> > >
> > >Matt, THANK YOU for taking this on.
> > >
> > >I've got a suggestion for a slightly different implementation approach.
> > >It would go something like this:
> > >
> > >* Implement "xhtml" as a boolean property of the HtmlTag class.
> > >
> > >* In subordinate tags that need to know the current setting,
> > >   use the findAncestorWithClass() method of the TagSupport class
> > >   (which all the Struts tags implement) to walk back through the
> > >   tag hierarchy nesting to locate the surrounding <html:html> tag
> > >   (if there is one).  Alternatively, you can walk the chain yourself
> > >   with getParent().
> > >
> > >This is similar to the technique used by things like the <html:text>
tag
> > >to find their surrounding <html:form> tag, and avoids polluting the
> > >attribute namespace for what is really a low-level presentation detail.
> > >In typical use, I'd bet that it even has better performance than the
> > >HashMap put and get that is required for page attributes.
> > >
> > >Craig
> > >
> > >
> > > > I'd like to use this e-mail to tell you my approach, ask you for
> > > advice, and
> > > > get your feedback.
> > > >
> > > > 1.  Approach:
> > > >
> > > >       In HtmlTag.java, add
> > > >               if (xhtml)
> > > >                       pageContext.setAttribute("xhtml", "true");
> > > >
> > > >       In all other html-producing tags (i.e. img, input), do a check
> > > when closing
> > > > the tag:
> > > >
> > > >                       // check if this is an XHTML document
> > > >                       String xhtml = (String)
> > > pageContext.getAttribute("xhtml");
> > > >
> > > >                       if (xhtml != null && xhtml.equals("true")) {
> > > >                           results.append("\" />"); // extra space
> > > before close
> > > > will allow XHTML to work in older browsers
> > > >                       } else {
> > > >                           results.append("\">");
> > > >                       }
> > > >
> > > > 2.  Advice:
> > > >
> > > > Should I be setting the "xhtml" variable in the pageContext,
request,
> or
> > > > session.  Page seems to make the most sense since that is what this
> > > variable
> > > > relates to.  However, to do this (to my understanding), I have to
> create
> > > > HtmlTei.java and add the <teiclass> declaration to the
> struts-html.tld:
> > > >
> > > >       public class HtmlTei extends TagExtraInfo {
> > > >
> > > >           /**
> > > >            * Return information about the scripting variables to be
> > > created.
> > > >            */
> > > >                   public VariableInfo[] getVariableInfo(TagData
data)
> {
> > > >
> > > >                       return new VariableInfo[] {
> > > >                         new
> >VariableInfo(data.getAttributeString("xhtml"),
> > > >                                          "java.lang.String",
> > > >                                          true,
> > > >                                          VariableInfo.NESTED)
> > > >                       };
> > > >
> > > >                   }
> > > >
> > > >       }
> > > >
> > > > However, this does not work as I'd expect it to.  What I'm expecting
> is
> > > that
> > > > I am exposing the "xhtml" variable simply by adding the HtmlTei
> class -
> >but
> > > > it's not working at all.
> > > >
> > > > 3.  Feedback:
> > > >
> > > > Please let me know what you think of this approach.  By doing this,
> and
> > > > adding a check if the user wants the doc to be XHTML, we should
> achieve
> > > full
> > > > backwards compatibility, and be able to convert the struts-html tags
> to
> >be
> > > > XHTML-compliant.
> > > >
> > > > Thanks,
> > > >
> > > > Matt
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > To unsubscribe,
> > > e-mail:   <mailto:[EMAIL PROTECTED]>
> > > > For additional commands, e-mail:
> > > <mailto:[EMAIL PROTECTED]>
> > > >
> > > >
> > >
> > >
> > >--
> > >To unsubscribe, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> > >For additional commands, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> >
> >
> >
> >--
> >To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> >For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
> >
> >
> >--
> >To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> >For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to