Login  Register

Re: HtmlWidget missing a MapStack pop?

Posted by jonwimp on Nov 26, 2007; 5:47pm
URL: http://ofbiz.116.s1.nabble.com/HtmlWidget-missing-a-MapStack-pop-tp185908p185910.html

Oh. Sorry.

${component:widget}/src

package org.ofbiz.widget.screen;

Jonathon

BJ Freeman wrote:

> can you give a reference to where the code is.
> can't seem to find it.
>
>
> Jonathon -- Improov sent the following on 11/26/2007 8:09 AM:
>> Hmm. Another quirk that sent me off the cliff. :)
>>
>> HtmlWidget.render(Writer, Map, ScreenStringRenderer) seems to be missing
>> a MapStack pop.
>>
>> To see the bug, do the 2 screen widgets below, "SomeScreen" and
>> "SomeDecorator".
>>
>> What happens is that section "section2" is gone after processing
>> "section1" in "SomeDecorator".
>>
>> Here's why.
>>
>> See "SomeDecorator". The SectionsRenderer stored in variable "sections"
>> is created with one section at the line of
>> <html-template-decorator-section name="section1">. This SectionsRenderer
>> is created in a private context, with the context of "SomeScreen" pushed
>> into a MapStack.
>>
>> Before that, the SectionsRenderer stored in variable "sections" in the
>> previous context (that of "SomeScreen") was created with 2 sections
>> "section1" and "section2".
>>
>> During processing, because the first SectionsRenderer (with only 1
>> section "section1") was never popped from the MapStack, it is used to do
>> the next section include <decorator-section-include name="section2"/>.
>> Obviously, the section "section2" does not exist.
>>
>> <screen name="SomeScreen">
>>   <section>
>>   <widgets>
>>     <decorator-screen name="SomeDecorator">
>>
>>       <decorator-section name="section1">
>>         <label text="Section One content"/>
>>       </decorator-section>
>>
>>       <decorator-section name="section2">
>>         <label text="Section Two content"/>
>>       </decorator-section>
>>
>>     </decorator-screen>
>>   </widgets>
>>   </section>
>> </screen>
>>
>> <screen name="SomeDecorator">
>>   <section>
>>   <widgets>
>>
>>     <platform-specific><html>
>>       <html-template-decorator location="SomeTemplate.ftl">
>>         <html-template-decorator-section name="section1">
>>           <decorator-section-include name="section1"/>
>>         </html-template-decorator-section>
>>       </html-template-decorator>
>>     </html></platform-specific>
>>
>>     <decorator-section-include name="section2"/>
>>
>>   </widgets>
>>   </section>
>> </screen>
>>
>> Jonathon
>>
>>
>>
>
>