Adam,
Yes indeed a controller  is more suitable here.The TilesAction approach is 
useful when  a radically different layout is required depending on a condition. 
rgds
Rahul

-----Original Message-----
From: Adam Gordon [mailto:[EMAIL PROTECTED]
Sent: Tuesday, December 12, 2006 5:44 PM
To: Struts Users Mailing List
Subject: Re: Struts Tiles question re menus


Rahul-

After reading 5.2.2, I can make it work using that structure, however I 
believe it defeats the original intent of Tiles because it would require 
me to have a n^2 tiles definitions for each scenario where n is the 
number of submenu items that need to be configured.

After some digging around with your tiles controller idea and reading 
the relevant section in that PDF, I defined my own tiles controller for 
that module and can retrieve the list of menu items for any tiles 
definition.  Then, I can iterate over the menu items and make invisible 
any menus that are not supposed to be shown.

Here's the code:

tiles XML:

  <definition name="foo"
              extends="bar"
              controllerClass="path.to.MyTilesController">
    <putList name="subMenuItems">
      <bean classtype="path.to.my.MenuItem">
        <set-property property="prop1" value="val1"/>
        <set-property property="prop2" value="val2"/>
        <set-property property="menuItemVisibility" value="true"/>
      </bean>
      <bean classtype="path.to.my.MenuItem">
        <set-property property="prop1" value="val1"/>
        <set-property property="prop2" value="val2"/>
        <set-property property="menuItemVisibility" value="true"/>
      </bean>
      <bean classtype="path.to.my.MenuItem">
        <set-property property="prop1" value="val1"/>
        <set-property property="prop2" value="val2"/>
        <set-property property="menuItemVisibility" value="true"/>
      </bean>
    </putList>
  </definition>

tiles controller JAVA:

import org.apache.struts.tiles.Controller;
// other imports...

public class MyTilesController implements Controller {

  public void execute(ComponentContext tileContext,
                                    HttpServletRequest request,
                                    HttpServletResponse response,
                                    ServletContext servletContext)
    throws Exception {

    LOGGER.log(Level.FINE, "in tile controller execute method");

    ArrayList<MenuItem> subMenuItemList =
      (ArrayList<MenuItem>)tileContext.getAttribute("subMenuItems");

    if (subMenuItemList != null) {

      // do stuff here
    }
  }
}

Asthana, Rahul wrote:
> Look at "5.2.2 One Controller - Multiple Views" 
> in http://www2.lifl.fr/~dumoulin/tiles/tilesAdvancedFeatures.pdf
> This allows you to choose layouts on the fly.
> This can also be done by using just an org.apache.struts.tiles.Controller.
>
>
> -----Original Message-----
> From: Adam Gordon [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, December 12, 2006 3:58 PM
> To: Struts Users Mailing List
> Subject: Struts Tiles question re menus
>
>
> Hi-
>
> We're using Tiles to define submenu items (in a putList) for menu we 
> have in our web app.  We're using a custom menu object that has a 
> visibility flag that we can toggle depending on whether or not the user 
> has permission to see a given menu functionality.
>
> My problem is that I can't seem to find a way (generic or otherwise) to 
> retrieve a handle to those menu objects to toggle the visibility after 
> the user logs in and the features that he/she are allowed to use are 
> activated.  I thought about pulling them out of tiles all together, 
> however, I then lose the benefits of tiles and the placement of these 
> pages and would have to think about how to do this.
>
> The place we would do this is in a request listener class we have that 
> currently, amongst other things, creates the entire menu system for the 
> user.  Basically, we iterate over all the modules constructing menus for 
> each one and then we place each menu in the appropriate section.  But, 
> since the submenu items are created via Tiles, we don't have a handle to 
> the menu items...
>
> Any ideas?
>
> -adam
>
> ---------------------------------------------------------------------
> 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]
>   

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

Reply via email to