The solution looks quite nice.   After our experimentations with For, we
realized that the state of each minimize of each TabGroup should be a part
of a List and not in the component.  And that's where the TabGroupView fits
in.

Quite an eye-opener!! I always had the impression that a For loop would
render 'n' different components and not just one.

On 8/7/06, Reto Hotz <[EMAIL PROTECTED]> wrote:

Hi,

Thanks for your reply.

Yes, I found a solution:
I created a new "wrapper"-component who does the for-loop stuff. I
called it TabGroupView. Within this component I can save the
maximize/minimize status of all my TabGroups.
This means I moved my @For loop from the Home.html into this
component. My DirectLink-Listener is now also in the TabGroupView
component so I have full control over all groups.

Some example code:

Home.html:
<span jwcid="@Util:TabGroupView" source="ognl:items"/>

TabGroupView.html:
<span jwcid="@For" source="ognl:source" index="ognl:index"
value="ognl:group">
  <span jwcid="@TabGroup" title="ognl:group.title"
minimized="ognl:minimized" parameters="ognl:new
java.lang.Object[]{index, minimizedMap}"
listener="ognl:listeners.linkActionToggleGroup"/>
</span>

TabGroupView.java:
    public void linkActionToggleGroup(IRequestCycle cycle) {
        Object[] params = cycle.getListenerParameters();
        int index = (Integer) params[0];
        Map minMap = (Map) params[1];
        Boolean oldValue = (Boolean) minMap.get(index);
        minMap.put(index, !oldValue);
        setMinimizedMap(minMap);
    }

    public boolean isMinimized() {
        if (getMinimizedMap().containsKey(getIndex())) {
            return getMinimizedMap().get(getIndex());
        } else {
            getMinimizedMap().put(getIndex(), false);
            return false;
        }
    }

TabGroup.html:
<a jwcid="@DirectLink" parameters="ognl:parameters"
listener="ognl:listener">
  <span jwcid="@Insert" value="ognl:title"/>
</a>

TabGroup.java:
@Parameter(name="parameters", required=false)
public abstract Object getParameters();

@Parameter(name="listener", required=false)
public abstract IActionListener getListener();



Not sure if this is the preferred way, but it works. :)

Greetings
Reto


On 8/7/06, Karthik N <[EMAIL PROTECTED]> wrote:
> any luck with this issue?
>
> After some discussions and experimentation with a colleague of mine, it
> appears that there is only one component.  that's the nature of the For
> loop.   We did this in the listener on the page:
>
>         Map comps = this.getComponents();
>         Set keyMap = comps.keySet();
>         for (Iterator iter = keyMap.iterator(); iter.hasNext();) {
>             System.out.println( comps.get(iter.next()));
>
>         }
>
> Hence, if a For loop iterates over 'n' elements and writes out a
> @Util:TabGroup, there is just one component @Util:TabGroup.
>
> I suppose what it means is that for you to iterate over your list and
> control the maximize/minimize stuff, you'll have to have this as an
> attribute in the For loop's List, and accordingly use some client side
> scripting to handle maximize/minimize.
>
> Unless there is an attribute of the For loop that forces generation of
one
> @Util:TabGroup for every iteration.  If there is some such parameter, I
am
> not aware of it ....
>
> Good luck.
>
>
> On 8/4/06, Reto Hotz <[EMAIL PROTECTED]> wrote:
> >
> > The TabGroup has a @DirectLink to change the state:
minimized/maximized.
> >
> > Home.html :
> > <span jwcid="@For" source="ognl:items" value="ognl:item">
> >   <span jwcid="@Util:TabGroup" title="ognl:item.name"/>
> > </span>
> >
> >
> > TabGroup.html:
> > <span jwcid="@If" condition="ognl:!minimized">
> >   <a jwcid="@DirectLink" parameters="ognl:minimized"
> > listener="ognl:listeners.lnkActionToggleGroup ">
> >     <span jwcid="@Insert" value="ognl:title"/>
> >   </a>
> > </span>
> >
> > TabGroup.jwc:
> > <component-specification class="TabGroup" allow-body="yes"
> > allow-informal-parameters="no">
> >   <parameter name="title" required="yes" cache="false"/>
> > </component-specification>
> >
> > TabGroup.java:
> > public abstract class TabGroup extends BaseComponent implements
> > PageAttachListener, IFormComponent {
> >
> >     public abstract String getTitle();
> >
> >     @Persist("client")
> >     public abstract boolean getMinimized();
> >
> >     public void lnkActionToggleGroup(boolean minimized) {
> >         setMinimized(!minimized);
> >     }
> >     ...
> > }
> >
> >
> > For example if I create 2 TabGroups *without* the @For loop they are
> > rendered like this:
> > $TabGroup
> > $TabGroup_0
> >
> > But if I create them *with* the @For loop, I get the component twice:
> > $TabGroup
> > $TabGroup
> >
> > --> both are the same component and thus if I click on the DirectLink
> > of the first component, the second gets minimized too.
> >
> > Greetings
> > Reto
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Thanks, Karthik
>
>

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




--
Thanks, Karthik

Reply via email to