Thanks Tim, I got it working! -----Original Message----- From: Tim Funk [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 07, 2004 10:07 AM To: Tomcat Users List Subject: Re: tag reuse, setParent and findAncestorWithClass
Turn off tag pooling. -Tim Justin Kennedy wrote: > Hi Tim, > > I read through the link you posted but I don't see any references to > setParent. I understand that setParent is only called once when the > attributes for a tag are the same (because it's reused), so how should I > go about developing the inner tag so the parent will always be set? I > read up on SimpleTag and that could be the answer, but I'm worried about > performance with this because the writevalue tag is called many many > times on one page. > > Thanksk > > -----Original Message----- > From: Tim Funk [mailto:[EMAIL PROTECTED] > Sent: Tuesday, September 07, 2004 7:59 AM > To: Tomcat Users List > Subject: Re: tag reuse, setParent and findAncestorWithClass > > http://jakarta.apache.org/tomcat/faq/misc.html#tagbroken > > -tim > > Justin Kennedy wrote: > >>Hi, >> >> >> >>I'm upgrading our tag library to Tomcat 5 and having problems. Note > > that > >>they were written back in JSP 1.1 and haven't changed for a few years. >> >> >> >>The problem looks like the tags are being cached and the setParent > > isn't > >>being called for each new "reuse". As a result the wrong tag is > > returned > >>from findAncestorWithClass when the WriteValueTag is re-used in a >>different nested block. Maybe this is how the spec was designed and I >>just don't know the right way to code the tags. Anyway here's what the >>JSP page looks like (note: transacttag issues a call to the database. >>Writevaluetag writes the value of a column from the data returned from >>transacttag. If 'transactId' isn't passed to WriteValueTag, it will > > use > >>the findAncestorWithClass to find the enclosing IterateTag to > > determine > >>the transactId): >> >> >> >><trans:transact id="uis" action="main_uis"/> >> >><logic:iterate transactId="uis" column="uiid"> >> >> <logic:equal value='<%=tmpuiid%>' column="uiid"> >> >> a - <trans:writeValue column="UI_NAME" /><br> >> >> <trans:parameters id="params" scope="request"> >> >> <trans:addParameter parametersId="params" key="UIID" > > value='<%= > >>tmpuiid %>'/> >> >> </trans:parameters> >> >> <trans:transact id="ui" action="sub_uis" parametersId="params" /> >> >> <logic:exists transactId="ui" column="description"> >> >> <logic:iterate transactId="ui" column="ui_flowid"> >> >> #1 - <trans:writeValue column="UI_NAME" /><br> >> >> #2 - <trans:writeValue transactId="ui" >>column="FORM_NAME"/><br> >> >> #3 - <trans:writeValue column="FORM_NAME"/><br> >> >> </logic:iterate> >> >> </logic:exists> >> >> </logic:equal> >> >></logic:iterate> >> >> >> >> >> >>The problems: >> >>1. UI_NAME in #1 is a column from the first "uis" transactTag. The >>writeValueTag prints out the value of this column but it shouldn't >>behave this way because it's enclosed IterateTag has a different >>"transactId". I put this here to demonstrate the problem >>2. FORM_NAME in #3 is a column in the second transactTag of "ui". >>This column value SHOULD be output (like it has always done) because > > the > >>enclosed iterateTag specifies the proper transactId, but this value is >>not output because it's parent is set to the first IterateTag and not >>the second, hence the different transactIds. >> >> >> >>#2 works only because I'm explicitly setting the transactId. >> >> >> >>The WriteValueTag extends the TagSupport class and everything is done > > in > >>the doStartTag event. >> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
