I've finally figured out the cause of the problem but is just really weird. Turns out the problem was being caused by a CSS class name!
This is the code from the breadcrumb component: <div class="module" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <t:loop source="menuItems" value="currentMenuItem"> <a href="${context}${currentMenuItem.link}">${currentMenuItem.text}</a> <img src="/images/arrow.png" alt="" /> </t:loop> ${currentPage.text} </div> The css in the container component for class="module" had something like this: div.module{ background: url(../images/square2.gif) no-repeat bottom left; } This were around 4 images loaded the same way. Apparently, all the paths were invalid. So I changed them to div.module { background: url(${asset:context:/layout/images/square2.gif}) no-repeat bottom left; } And all the Hibernate queries disappeared? Can someone please explain to me what is going on here? I'm just lost. I'm using Hibernate with Spring, not tapestry-hibernate as I need access to multiple databases. Thanks, Jeshurun On Mon, 2010-10-18 at 16:20 -0600, Jeshurun Daniel wrote: > Hi Howard, > > Thanks for the quick reply, I really need help with this. > > I have three page classes, Index, Page1 and Page2 > > Template for Index: > <div t:type="MyTheme" > t:mainMenuId="1" //I'm passing a param for the menu, but I don't want > breadcrumbs on this page > // Other page specific stuff > </div> > > Template for Page1: > <div t:type="MyTheme" // I want neither menu nor breadcrumbs on this > // Other page specific stuff > </div> > > Template for Page2: > <div t:type="MyTheme" > t:breadcrumbId="12"// I want just breadcrumbs on this page > // Other page specific stuff > </div> > > I have three components, a layout component, a menu component and a > page component. > This is the source for the layout component > > public class MyTheme { > > @Property > @Parameter(required = false) > private Integer breadcrumbMenuId; > > @Property > @Parameter(required = false ) > private Integer mainMenuId; > > public boolean isMainMenu(){ > if(mainMenuId != null && mainMenuId != 0) > return true; > return false; > } > > public boolean isBreadcrumb(){ > if(breadcrumbMenuId != null && breadcrumbMenuId != 0) > return true; > return false; > } > > //other code > } > > The is the simplified layout component template > <t:if test="mainMenu"> > <t:mainMenu mainMenuId="inherit:mainMenuId" /> > </t:if> > > <t:if test="breadcrumb"> > <t:breadcrumb breadcrumbMenuId="breadcrumbMenuId" /> > </t:if> > > This is the code for the breadcrumb component > public class Breadcrumb { > > @Inject > private MenuService menuService; > > @Parameter(required=true) > private Integer breadcrumbMenuId; > > @Property > private List<MenuItem> menuItems; > > @SuppressWarnings("unused") > @Property > private MenuItem currentMenuItem; > > @SuppressWarnings("unused") > @Property > private MenuItem currentPage; > > @BeginRender > void setupBreadcrumb(){ > menuItems = menuService.getMenuItemTree(breadcrumbMenuId); > currentPage = menuItems.remove(menuItems.size()-1); > } > } > > And the corresponding template > <div class="module" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <t:loop > source="menuItems" value="currentMenuItem"> > <a > href="${context}${currentMenuItem.link}">${currentMenuItem.text}</a> > <img src="/images/arrow.png" alt="" /> > </t:loop> ${currentPage.text} > </div> > > And finally the menu component class > > public class MainMenu extends Menu{ > > @Parameter(required = true ) > private Integer mainMenuId; > > @BeginRender > void setupComponent(){ //The superclass calls a method in the service > to build a composite > super.setupComponent(mainMenuId); > } > } > > and its template > <div id="menu-mss" class="moomenu" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <ul class="menutop"> > <t:outputraw value="menu.print()"/> //the menu property comes from the > superclass > </ul> > </div> > > > Now everything here works fine and I don't get any errors. > This is the general flow of the application. > 1. When someone logs in they come to the index page. This page only > has a menu and no breadcrumbs > 2. The second page has neither a menu nor a breadcrumb. It simply has > a pagelink to Page2 > 3. The third page only has the breadcrumb. This is where the problem > is. > The breadcrumb component runs two queries to build the breadcrumb for > this page. > But when I look at the console when this page loads, I see these two > queries, plus four repetitions of the query > for building the menu. The menuId in these queries is the menuId i set > on the Index page(1). > I have no idea how it is still hanging around. If I print it in the > getter/setter or the component, or > in the setupComponent() method and refresh page2, I see that it is > called four times and prints out menuId as 1, > even though I'm not passing it in the page class. However, if I > restart the server and go straight to page2, > then the getter method for menuId is never called and I dont see the > query for the menu in the console. > > I tried moving the breadcrumb component to the page class and it does > the same thing. Its almost as if the menuId > parameter passed from the Index page into the component has been > persisted. If i remove the breadcrumb tag in > the page class, the menu queries don't show up either. If i remove the > <t:mainMenu /> tag from the component, > again the additional queries disappear. > > I tried something like this in the component after making mainMenuId a > prop binding > @AfterRender > void cleanUp(){ > mainMenuId = null; > } > Still the same thing. > > I tried setting cache=false on mainMenuId on the component with no > luck > > My setup uses Tapestry 5.1.0.5, spring 2.5.6 and the latest version of > Hibernate (3.2.x). > Again, I don't get any errors. Its just that it bothers me because I > don't understand why it does that :). Besides, building > the menu is expensive (very recursive), so I don't want to do it if > the page doesn't need it. > This is probably either expected behaviour or I'm just blindly > overlooking something, but in either case, any pointers on > how I can get around this is appreciated. > > Thanks in advance, > Jeshurun