[prev in list] [next in list] [prev in thread] [next in thread]
List: struts-user
Subject: Re: <tiles:put /> in ActionForward.perform()
From: "Roland Carlsson" <roland.c () swetravel ! se>
Date: 2002-10-31 14:58:40
[Download RAW message or body]
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" <cedric@apache.org>
To: "Struts Users Mailing List" <struts-user@jakarta.apache.org>
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" <cedric@apache.org>
> >To: "Struts Users Mailing List" <struts-user@jakarta.apache.org>
> >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" <cedric@apache.org>
> >>>To: "Struts Users Mailing List" <struts-user@jakarta.apache.org>
> >>>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" <roland.c@swetravel.se>
> >>>>>To: "Struts Users Mailing List" <struts-user@jakarta.apache.org>
> >>>>>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>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic