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]>