Gotcha - actually no jsp has access but the template at any level - so even the jsps defined at the highest level in my case header.jsp do not have access. Tiles uses the Tiles Context - not the page (which would not work either), request, session, or application - so only the template has access to the attributes.. If I need to modify the layout or modify an attribute based on runtime factors I use the controllerURL to get a handle on the Tiles Context and modify it prior to the jsp getting the page - I also stuff a few common attributes into request scope at the same time so all the jsps can have access - to things like the definition being rendered.
Cal www.calandva.com -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of [EMAIL PROTECTED] Sent: Monday, December 08, 2003 2:23 PM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: RE: Tiles, Definition inheritence I think the problem that Oliver was having (expressed through your example) was that the webpage defined by level3.pagedef.content (/web/pages/level3/Level3Content.jsp) could not access attributes defined in the same context (for example, level3.pagedef.index (/web/pages/level3/Level3Index.jsp). -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Monday, December 08, 2003 12:11 PM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: RE: Tiles, Definition inheritence The issue that keeps coming up is the ability for jsps other than the "page=" (template) jsp to have access to the attributes. John provided a good technique using a second definition. As to the definitions and the template's ability to access attributes - you can add attributes to extended definitions and then extend them. I have an example app using that technique on my site: http://www.calandva.com/holmansite/do/blog/blogging?date=20030711#094831 In this app I access the Tiles Context in an action and in a tag to modify the attributes on the fly. In the advanced pdf Cedric provides an example of creating the number of columns in the body of a template on the fly. <definition name="home.pagedef" page="/template.jsp" controllerUrl="/do/renderCrumb" > <put name="title" value="home.title" /> <put name="header" value="/web/includes/header.jsp" /> <put name="index" value="/web/pages/home/HomeIndex.jsp" /> <put name="content" value="/web/pages/home/HomeContent.jsp" /> <put name="footer" value="/web/includes/footer.jsp" /> <put name="styleSheet" value="web/styles/Grey_StyleSheet.css" /> <put name="keywords" value="home.keywords"/> <put name="crumbs" value="/web/includes/crumb.jsp"/> <put name="crumbtitle1" value="Home"/> <put name="crumblink1" value="do/AutoForward?forward=home.pagedef"/> <put name="pagename" value="home"/> </definition> <definition name="level2.pagedef" extends="home.pagedef"> <put name="title" value="level2.title" /> <put name="index" value="/web/pages/level2/Level2Index.jsp" /> <put name="content" value="/web/pages/level2/Level2Content.jsp" /> <put name="keywords" value="level2.keywords"/> <put name="crumbtitle2" value="Level 2"/> <put name="crumblink2" value="do/AutoForward?forward=level2.pagedef"/> <put name="pagename" value="level2"/> </definition> <definition name="level3.pagedef" extends="level2.pagedef"> <put name="title" value="level3.title" /> <put name="index" value="/web/pages/level3/Level3Index.jsp" /> <put name="content" value="/web/pages/level3/Level3Content.jsp" /> <put name="crumbtitle3" value="Level 3"/> <put name="crumblink3" value="do/AutoForward?forward=level3.pagedef"/> <put name="pagename" value="level3"/> </definition> When the level3.pagedef is used the template.jsp has access to all three levels of crumbtitle values. Some attributes are overridden and others are added as the definitions are extended. Any attribute you add in the extended path is available to the extended template. Let me know if I am off base. Cal www.calandva.com -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Hibbs, David Sent: Monday, December 08, 2003 10:12 AM To: 'Oliver Wulff'; [EMAIL PROTECTED] Subject: RE: Tiles, Definition inheritence This is (IMHO) a classic issue with tiles. The Tiles meaning of 'inheritance' isn't quite the same as in Java or other OO concepts. Tiles inherit values from their parents, and can override those values. However, adding new values is not supported. The only way [that I've found, anway] that you can support the addition of new properties is to use the tiles importAttribute tag (see http://jakarta.apache.org/struts/userGuide/struts-tiles.html#importAttri bute ) in the main layout JSP, i.e. /layout/classicLayout.jsp, to pass the values into a scope where they can be found by other tags such as <bean:write> and use the values that way. David Hibbs, ACS Staff Programmer / Analyst American National Insurance Company > -----Original Message----- > From: Oliver Wulff [mailto:[EMAIL PROTECTED] > Sent: Monday, December 08, 2003 5:16 AM > To: [EMAIL PROTECTED] > Subject: Tiles, Definition inheritence > > Hi > > I'm quite new to Tiles and I've got the following problem: > > I've defined the following default definition: > <definition name=".mainLayout" path="/layout/classicLayout.jsp"> > <put name="title" value="Berechtigung WEB with Tiles" /> > <put name="header" value="/top_menu.jsp" /> > <put name="menu" value="/toc.jsp" /> > <put name="footer" value="/footer.jsp" /> > <put name="body" value="/welcome.jsp" /> > </definition> > > The classicLayout.jsp hasn't been changed (Struts examples). > > Additionally, I've defined the following Definition: > <definition name=".showOrgEinheit" extends=".mainLayout"> > <put name="input" value="/getOrgEinheit.jsp" /> > <put name="result" value="/showOrgEinheit.jsp" /> > <put name="body" value="/layout/bodyTwoColumns.jsp" /> > </definition> > > The bodyTwoColumns looks like this: > <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> > > <table border="0" width="100%" cellspacing="5"> > <tr> > <td width="50%" align="left"> > <tiles:insert attribute='input'/> > </td> > <td width="50%" align="left"> > <tiles:insert attribute='result' /> > </td> > </tr> > </table> > > My struts action forwards to the definition .showOrgEinheit > but I get the > following error: > [ServletException in:/layout/bodyTwoColumns.jsp] Error - Tag > Insert : No > value found for attribute 'input'.' > > Can anybody help me, please? Thank you a lot. > > Cheers > Oliver > > > > > > > ******************* BITTE BEACHTEN ******************* > Diese Nachricht (wie auch allfällige Anhänge dazu) beinhaltet > möglicherweise vertrauliche oder gesetzlich geschützte Daten oder > Informationen. Zum Empfang derselben ist (sind) ausschliesslich die > genannte(n) Person(en) bestimmt. Falls Sie diese Nachricht > irrtümlicherweise erreicht hat, sind Sie höflich gebeten, diese unter > Ausschluss jeder Reproduktion zu zerstören und die absendende Person > umgehend zu benachrichtigen. Vielen Dank für Ihre Hilfe. > > --------------------------------------------------------------------- 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]