Re: tiles:put / in ActionForward.perform()
Hi, Do you have specify the Tiles plugin in your struts-config (struts1.1) or the appropriate ComponentActionServlet (Struts1.0.x) ? More answers intermixed. Cedric Roland Carlsson wrote: Hi again! I think I have got some progress in the subject. I found the org.apache.struts.webapp.tiles.template.DynTemplateAction and with that as model i added a page looking like this: /layout6/page2.jsp-- % taglib uri=/WEB-INF/struts-tiles.tld prefix=tiles % tiles:insert beanName=test.page /tiles:insert --- beanName attribute is used to specify to get a definition stored as a bean in a jsp scope. Definitions declared in a config file aren't store in such scope. They are stored in the definition factory. You should use tiles:insert definition=aDefinition ... So now my action looks like this: -- action path=/layout6/page type=layout.BodyChangeAction forward name=success path=/layout6/page2.jsp / forward name=error path=/layout6/error.jsp / /action - I get the following exception: javax.servlet.ServletException: Error - Tag Insert : No value defined for bean 'test.page' with property 'null' in scope 'null'. You got it because no bean can be found under requested name. I also tried to request.getAttribute(test.page); but it returns null so to me it seems like request.setAttribute(test.page, defintion); doesn't reach page2.jsp?? This is consistant with what I have said before. There is no such bean in the request context. Other info: --/layout6/page-defintion- 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 --Source of my action - 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().getServletContext(); ComponentDefinition cd = null; try{ // Get the name of the defintion from the URI String definition = request.getRequestURI(); definition = definition.substring(0, definition.lastIndexOf('.')); // Create new definition from and 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) ; request.setAttribute(test.page, cd); // if something is wrong }catch(Exception e){ e.printStackTrace(); forward = error; } } return mapping.findForward(forward); 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
Re: tiles:put / in ActionForward.perform()
Hi again! I think I have got some progress in the subject. I found the org.apache.struts.webapp.tiles.template.DynTemplateAction and with that as model i added a page looking like this: /layout6/page2.jsp-- % taglib uri=/WEB-INF/struts-tiles.tld prefix=tiles % tiles:insert beanName=test.page /tiles:insert --- So now my action looks like this: -- action path=/layout6/page type=layout.BodyChangeAction forward name=success path=/layout6/page2.jsp / forward name=error path=/layout6/error.jsp / /action - I get the following exception: javax.servlet.ServletException: Error - Tag Insert : No value defined for bean 'test.page' with property 'null' in scope 'null'. - I also tried to request.getAttribute(test.page); but it returns null so to me it seems like request.setAttribute(test.page, defintion); doesn't reach page2.jsp?? Other info: --/layout6/page-defintion- 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 --Source of my action - 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().getServletContext(); ComponentDefinition cd = null; try{ // Get the name of the defintion from the URI String definition = request.getRequestURI(); definition = definition.substring(0, definition.lastIndexOf('.')); // Create new definition from and 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) ; request.setAttribute(test.page, cd); // if something is wrong }catch(Exception e){ e.printStackTrace(); forward = error; } } return mapping.findForward(forward); 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
Re: tiles:put / in ActionForward.perform()
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
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
Re: tiles:put / in ActionForward.perform()
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
RE: tiles:put / in ActionForward.perform()
You can use the TilesAction to dynamically change a definition. Check out the documentation for dynamic portals. Cal http://www.calandva.com/ -Original Message- From: Roland Carlsson [mailto:roland.c;swetravel.se] Sent: Tuesday, October 29, 2002 10:31 To: Struts Users Mailing List 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 Learn more about Paymentech's payment processing services at www.paymentech.com THIS MESSAGE IS CONFIDENTIAL. This e-mail message and any attachments are proprietary and confidential information intended only for the use of the recipient(s) named above. If you are not the intended recipient, you may not print, distribute, or copy this message or any attachments. If you have received this communication in error, please notify the sender by return e-mail and delete this message and any attachments from your computer. -- To unsubscribe, e-mail: mailto:struts-user-unsubscribe;jakarta.apache.org For additional commands, e-mail: mailto:struts-user-help;jakarta.apache.org
RE: tiles:put / in ActionForward.perform()
Do the tiles definition and the body attribute have the same name? I would think you would have to pass two parameters - the definition to act on and the body attribute to replace. Or the definition is constant and only the body can change. What does your tiles definition file look like? Cal http://www.calandva.com/ -Original Message- From: Roland Carlsson [mailto:roland.c;swetravel.se] Sent: Wednesday, October 30, 2002 04:04 To: Struts Users Mailing List Subject: Re: tiles:put / in ActionForward.perform() 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 Learn more about Paymentech's payment processing services at www.paymentech.com THIS MESSAGE IS CONFIDENTIAL. This e-mail message and any attachments are proprietary and confidential information intended only for the use of the recipient(s) named above. If you are not the intended recipient, you may not print, distribute, or copy this message or any attachments. If you have received this communication in error, please notify the sender by return e-mail and delete this message and any attachments from your computer. -- To unsubscribe, e-mail: mailto:struts-user-unsubscribe;jakarta.apache.org For additional commands, e-mail: mailto:struts-user-help;jakarta.apache.org
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
Re: tiles:put / in ActionForward.perform()
Hello Hal! I have limit the functionallity of the Action so it will only change the content of one tile named body. -- definition name=/layout5/page page=/layout5/layout.jsp put name=header value=/layout5/header.jsp/ put name=footer value=/layout5/footer.jsp/ put name=menu value=/layout5/menu.jsp/ put name=body value=/layout5/body1.jsp/ /definition - action path=/layout5/page type=layout.BodyChangeAction forward name=success path=/layout5/page / /action /action-mappings --- http://localhost:8081/layout5/page.do?body=body2.jsp - The url will change body in the defintion from body1.jsp to body2.jsp for this request. The definition and the action have the same name. If they didn't have the same name I must send the name of the definition name as an parameter in the url. I don't know if there is a better way of doing this? Scary Halloween Regards Roland Carlsson - Original Message - From: Holman, Cal [EMAIL PROTECTED] To: 'Struts Users Mailing List' [EMAIL PROTECTED] Sent: Wednesday, October 30, 2002 1:44 PM Subject: RE: tiles:put / in ActionForward.perform() Do the tiles definition and the body attribute have the same name? I would think you would have to pass two parameters - the definition to act on and the body attribute to replace. Or the definition is constant and only the body can change. What does your tiles definition file look like? Cal http://www.calandva.com/ -Original Message- From: Roland Carlsson [mailto:roland.c;swetravel.se] Sent: Wednesday, October 30, 2002 04:04 To: Struts Users Mailing List Subject: Re: tiles:put / in ActionForward.perform() 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 Learn more about Paymentech's payment processing services at www.paymentech.com THIS MESSAGE IS CONFIDENTIAL. This e-mail message and any attachments are proprietary and confidential information intended only for the use of the recipient(s) named above. If you are not the intended recipient, you may not print, distribute, or copy this message or any attachments. If you have received this communication in error, please notify the sender by return e-mail and delete this message and any attachments from your computer. -- 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
Re: tiles:put / in ActionForward.perform()
Ok, I'll take a look into that one. I found out that my Action did last over requests... witch it isn't supposed to do. :-( So I'm back to square one. 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
Re: tiles:put / in ActionForward.perform()
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
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