Hí! I have tried but I missed something.
I'm using the code below to alter the definition with the following request http://localhost:8081/layout6/page.do?body=/layout6/body2.jsp. I put the defintion into the request but I have a feeling that I need to do something more. Now I just come back to the original definintion. --------------------------------------------------- // Get the name of the defintion from the URI String definition = request.getRequestURI(); definition = definition.substring(0, definition.lastIndexOf('.')); // Create new definition from an existing cd = new ComponentDefinition(DefinitionsUtil.getDefinition(definition, request, context)) ; // Alter the definition cd.putAttribute("body", path); // Put the definition where the page can find it DefinitionsUtil.setActionDefinition( request, cd) ; // Put the definition into the request request.setAttribute(definition, cd); . . . return mapping.findForward(...); -------------------------------------------------------- <action path="/layout6/page" type="layout.BodyChangeAction" > <forward name="success" path="/layout6/page" /> <forward name="error" path="/layout6/error.jsp" /> </action> ----------------------------------------- <definition name="/layout6/page" page="/layout6/layout.jsp" > <put name="header" value="/layout6/header.jsp"/> <put name="footer" value="/layout6/footer.jsp"/> <put name="menu" value="/layout6/menu.jsp"/> <put name="body" value="/layout6/body1.jsp"/> </definition> ------------------------------------------------- Thanks Roland Carlsson ----- Original Message ----- From: "Cedric Dumoulin" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Thursday, October 31, 2002 1:49 PM Subject: Re: <tiles:put /> in ActionForward.perform() > > The context is the tile context. It is associated to current tile, and > created when you insert the Tile, or forward to a tile. So, it doesn't > exist if your action is called throw the normal Struts way. But, you > don't need the context to get a definition from the factory and put it > in the request scope in order to be used by the struts forward. > > Cedric > > Roland Carlsson wrote: > > >Ok. so far I have got it but I still doesn't get the request into context. > > > > ComponentContext context = ComponentContext.getContext( request ); > >returns null so I having a hard time to test the > >org.apache.struts.webapp.tiles.test.TestActionTileAction class. > > > >What is wrong when ComponentContext.getContext(request) returns null? I > >doesn't get any help from the documentation here. > > > >Thanks in advace > >Roland Carlsson > > > > > >----- Original Message ----- > >From: "Cedric Dumoulin" <[EMAIL PROTECTED]> > >To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >Sent: Wednesday, October 30, 2002 4:56 PM > >Subject: Re: <tiles:put /> in ActionForward.perform() > > > > > > > > > >> Ok, I haven't read carefully enough your previous mail. > >> You can create a new definition from a definition read in the factory, > >>and then instruct current Struts action to use your new definition. More > >>precisely, the definition associated to the struts forward will be > >>overloaded by your definition. > >> The class org.apache.struts.webapp.tiles.test.TestActionTileAction use > >>in the tiles-documentation/test do that. > >> Following is an extract from this class. The code get the definition, > >>copy it, modify the copy, and then put it in the appropriate request > >>attribute. The > >> > >> > >> // Read definition from factory, but we can create it here. > >> > >> ComponentDefinition definition = DefinitionsUtil.getDefinition( > >> > >> > >... ); > > > > > >> definition = new ComponentDefinition(definition); > >> > >> definition.putAttribute( "attributeName", "aValue" ); > >> > >> DefinitionsUtil.setActionDefinition( request, definition); > >> > >> ... > >> > >> return (mapping.findForward("success")); > >> > >> > >> Cedric > >> > >> > >> > >>Roland Carlsson wrote: > >> > >> > >> > >>>Hi ! > >>>I think the DefinitionDispatcherAction doesn't do what I want to do.... > >>> > >>>Imagine that you have a definition with 2 tiles (left and body) > >>>In the left tile there are a collection of links that will change the > >>>content of body. > >>> > >>>If I understands what the DefinitonDispatcherAction does it will change > >>> > >>> > >what > > > > > >>>defintion to use. What I want to do is to change one tile in the > >>> > >>> > >defintion, > > > > > >>>much like a frameset where i doesn't change the frameset, only one page > >>> > >>> > >in > > > > > >>>it. So I want to call the same defintion and alter a tile in that > >>> > >>> > >defintion. > > > > > >>>Not change the defintion. > >>> > >>>The problem with the perform-method I posted is that it change the tile > >>> > >>> > >in > > > > > >>>the application-scope and I havn't figured out yet how to make the change > >>>isolate into a request only. > >>> > >>>Regards > >>>Roland > >>> > >>> > >>> > >>> > >>>----- Original Message ----- > >>>From: "Cedric Dumoulin" <[EMAIL PROTECTED]> > >>>To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >>>Sent: Wednesday, October 30, 2002 2:11 PM > >>>Subject: Re: <tiles:put /> in ActionForward.perform() > >>> > >>> > >>> > >>> > >>> > >>> > >>>> Hi, > >>>> > >>>> I think there is an action in the Tiles/Struts distribution doing > >>>>exactly that ;-) > >>>>Check org.apache.struts.tiles.actions.DefinitionDispatcherAction. > >>>> > >>>> Cedric > >>>> > >>>>Roland Carlsson wrote: > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>>I have solved my own question. If anyone is intrested I past the code > >>>>> > >>>>> > >>>>> > >>>>> > >>>below. > >>> > >>> > >>> > >>> > >>>>>The change in the definition lasts only for the request and will not > >>>>> > >>>>> > >make > > > > > >>>>>any permanent changes. > >>>>> > >>>>>Regards > >>>>>Roland Carlsson > >>>>> > >>>>> > >>>>>public ActionForward perform( > >>>>> ActionMapping mapping, > >>>>> ActionForm form, > >>>>> HttpServletRequest request, > >>>>> HttpServletResponse response) > >>>>>throws IOException, ServletException > >>>>>{ > >>>>> String forward = "success"; > >>>>> String path = request.getParameter("body"); > >>>>> // Change nothing > >>>>> if(path == null || path.equals("")){ > >>>>> // do nothing > >>>>> }else{ > >>>>> // Try to change body-page > >>>>> ServletContext context = > >>>>>this.getServlet().getServletConfig().getServletContext(); > >>>>> ComponentDefinition cd = null; > >>>>> try{ > >>>>> cd = DefinitionsUtil.getDefinition(path, request, context) ; > >>>>> cd.put("body", request.getParameter("body")); > >>>>> // if something is wrong > >>>>> }catch(Exception e){ > >>>>> e.printStackTrace(); > >>>>> forward = "error"; > >>>>> } > >>>>> } > >>>>> return mapping.findForward(forward); > >>>>>} > >>>>> > >>>>>----- Original Message ----- > >>>>>From: "Roland Carlsson" <[EMAIL PROTECTED]> > >>>>>To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >>>>>Sent: Tuesday, October 29, 2002 4:31 PM > >>>>>Subject: <tiles:put /> in ActionForward.perform() > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>Hi! > >>>>>>I'm trying to expand my tiles with a dynamic body. I want to control > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>this > >>> > >>> > >>> > >>> > >>>>>>body with a simple parameter in the url eg > >>>>>>http://localhost:8081/myPage?body=aTile.jsp . Does anyone have an > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>example > >>> > >>> > >>> > >>> > >>>>>> > >>>>>> > >>>>>of > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>how to do this? > >>>>>> > >>>>>>Thanks in advance > >>>>>>Roland Carlsson > >>>>>> > >>>>>> > >>>>>>-- > >>>>>>To unsubscribe, e-mail: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>><mailto:struts-user-unsubscribe@;jakarta.apache.org> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>For additional commands, e-mail: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>><mailto:struts-user-help@;jakarta.apache.org> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>-- > >>>>>To unsubscribe, e-mail: > >>>>> > >>>>> > >>>>> > >>>>> > >>><mailto:struts-user-unsubscribe@;jakarta.apache.org> > >>> > >>> > >>> > >>> > >>>>>For additional commands, e-mail: > >>>>> > >>>>> > >>>>> > >>>>> > >>><mailto:struts-user-help@;jakarta.apache.org> > >>> > >>> > >>> > >>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>-- > >>>>To unsubscribe, e-mail: > >>>> > >>>> > >>>> > >>>> > >>><mailto:struts-user-unsubscribe@;jakarta.apache.org> > >>> > >>> > >>> > >>> > >>>>For additional commands, e-mail: > >>>> > >>>> > >>>> > >>>> > >>><mailto:struts-user-help@;jakarta.apache.org> > >>> > >>> > >>> > >>> > >>>-- > >>>To unsubscribe, e-mail: > >>> > >>> > ><mailto:struts-user-unsubscribe@;jakarta.apache.org> > > > > > >>>For additional commands, e-mail: > >>> > >>> > ><mailto:struts-user-help@;jakarta.apache.org> > > > > > >>> > >>> > >>> > >>> > >>-- > >>To unsubscribe, e-mail: > >> > >> > ><mailto:struts-user-unsubscribe@;jakarta.apache.org> > > > > > >>For additional commands, e-mail: > >> > >> > ><mailto:struts-user-help@;jakarta.apache.org> > > > > > > > > > >-- > >To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org> > >For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org> > > > > > > > > > > > -- > To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org> > For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org> > -- To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>