Re: Dynamic pages (or: arguments to pages) [T4]
On 29.11.2007, at 11:02, Ulrich Stärk wrote: These are just guesses, I haven't tried them nor verified them. I could imagine that the parameter isn't available via the WebRequest because the page didn't get called by a GET request directly but with the help of the service encoder, so your parameter isn't there anymore when the page get's rendered. Try to get hold of the IRequestCycle by calling getRequestCycle() and call getParameter on it. I wouldn't be surprised if it's in there. Hi Uli, That was it! It turns out that the @InjectObject("infrastructure:request") public abstract WebRequest getRequest(); is not needed anymore with this solution. Thanks a lot for the help, Kaspar P.S. For the sake of completeness, here is the complete solution -- in case somebody else needs it. public abstract class MyPage extends BasePage implements PageBeginRenderListener { public void pageBeginRender(PageEvent event) { super.pageBeginRender(event); // find out the node we're suppost to show IRequestCycle cycle = getRequestCycle(); String myParam = cycle.getParameter("myParam"); } // ... } public class KCNodeServiceEncoder implements ServiceEncoder { // ... public void decode(ServiceEncoding encoding) { // ... (get parameter value from URL) encoding.setParameterValue("myParam", value); } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Dynamic pages (or: arguments to pages) [T4]
These are just guesses, I haven't tried them nor verified them. I could imagine that the parameter isn't available via the WebRequest because the page didn't get called by a GET request directly but with the help of the service encoder, so your parameter isn't there anymore when the page get's rendered. Try to get hold of the IRequestCycle by calling getRequestCycle() and call getParameter on it. I wouldn't be surprised if it's in there. Cheers, Uli Kaspar Fischer schrieb: Unfortunately, my solution does not really work yet. My page uses @InjectObject("infrastructure:request") public abstract WebRequest getRequest(); public void pageBeginRender(PageEvent event) { super.pageBeginRender(event); WebRequest request = getRequest(); id = request.getParameterValue("id")); // (*) } to read the Id of the page to display. This indeed works: http://localhost/app?id=someid results in id from (*) being set to "someid". I now wanted to support friendly URLs and wrote a ServiceEncoder whose decode() method extracts the Id form a URL like http://localhost/node/id.html and sets it: public void decode(ServiceEncoding encoding) { // ... String id = // ... encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.PAGE_SERVICE); encoding.setParameterValue(ServiceConstants.PAGE, _className); encoding.setParameterValue("id", id); } But although the variable encoding contains the parameter "id" with its value (I verifed this), the page's pageBeginRender() from above receives null. I feel I misunderstand something here. Why are parameters not passed on to the page request? Many thanks, Kaspar - 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]
Re: Dynamic pages (or: arguments to pages) [T4]
Unfortunately, my solution does not really work yet. My page uses @InjectObject("infrastructure:request") public abstract WebRequest getRequest(); public void pageBeginRender(PageEvent event) { super.pageBeginRender(event); WebRequest request = getRequest(); id = request.getParameterValue("id")); // (*) } to read the Id of the page to display. This indeed works: http://localhost/app?id=someid results in id from (*) being set to "someid". I now wanted to support friendly URLs and wrote a ServiceEncoder whose decode() method extracts the Id form a URL like http://localhost/node/id.html and sets it: public void decode(ServiceEncoding encoding) { // ... String id = // ... encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.PAGE_SERVICE); encoding.setParameterValue(ServiceConstants.PAGE, _className); encoding.setParameterValue("id", id); } But although the variable encoding contains the parameter "id" with its value (I verifed this), the page's pageBeginRender() from above receives null. I feel I misunderstand something here. Why are parameters not passed on to the page request? Many thanks, Kaspar - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Dynamic pages (or: arguments to pages) [T4]
Ulrich, Andy, Jesse, Jonathan, and Andy, thanks a lot for the many responses and tips! I am using T4 and have implemented it by injecting the web request into my page and using a URL encoder for friendly URLs. Regards, Kaspar On 27.11.2007, at 01:54, Andy Huhn wrote: Kaspar, If you're using T5, see http://tapestry.apache.org/tapestry5/tapestry-core/guide/pagenav.html Especially the section titled "Page activation". Andy On Mon, 2007-11-26 at 19:49 +0100, Kaspar Fischer wrote: Hi All, I am new to Tapestry and would be glad to receive a hint on how to realize "dynamic pages", i.e., pages whose content depends on GET arguments. I have a database full of articles, each having an Id, and I want to show each article on its own page. In PHP, I would have used URLs like http://my.organization.org/app?page=article&id=2832 to display article with Id 2832. I am not quite sure what the Tapestry way for such a problem is. I've coded a page ArticlePage that extends BasePage and now need a way to learn the Id from the URL. How can I do this? Many thanks, Kaspar - 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] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]