Return To Page (1)

Sometimes a page can be called from many other pages. If so, it can be tricky for the page to return to the previous page.
This example shows a way to do it.

This page creates a Link to itself, complete with the current context (ie. the value of arg1). It passes the Link to the next page.
Current context:
References: Link, PageRenderLinkSource.

Home

ReturnToPage1.tml


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- We need a doctype to allow us to use special characters like &nbsp; 
     We use a "strict" DTD to make IE follow the alignment rules. -->
     
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
    <link rel="stylesheet" type="text/css" href="${context:css/examples/examples.css}"/>
</head>
<body>
    <h1>Return To Page (1)</h1>
    
    Sometimes a page can be called from many other pages.  If so, it can be tricky for the page to return to the previous page.<br/>
    This example shows a way to do it.<br/><br/>
    
    This page creates a Link to itself, complete with the current context (ie. the value of arg1).  
    It passes the Link to the next page.
    
    <div class="eg">
        <form t:type="form" t:id="inputs">
            Current context: <input t:type="TextField" t:id="arg1" t:validate="required"/>
            <input type="submit" value="Submit"/>
        </form> 
    </div>

    References: 
    <a href="http://tapestry.apache.org/5.3.7/apidocs/org/apache/tapestry5/Link.html">Link</a>, 
    <a href="http://tapestry.apache.org/5.3.7/apidocs/org/apache/tapestry5/services/PageRenderLinkSource.html">PageRenderLinkSource</a>.<br/><br/>

    <a t:type="pagelink" t:page="Index" href="#">Home</a><br/><br/>

    <t:sourcecodedisplay src="/web/src/main/java/jumpstart/web/pages/examples/navigation/ReturnToPage1.tml"/>
    <t:sourcecodedisplay src="/web/src/main/java/jumpstart/web/pages/examples/navigation/ReturnToPage1.java"/>
    <t:sourcecodedisplay src="/web/src/main/java/jumpstart/web/css/examples/examples.css"/>
</body>
</html>

ReturnToPage1.java


package jumpstart.web.pages.examples.navigation;

import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PageRenderLinkSource;

public class ReturnToPage1 {

    // The activation context

    @Property
    private String arg1;

    // Other pages

    @InjectPage
    private ReturnToPage2 page2;

    // Generally useful bits and pieces

    @Inject
    private PageRenderLinkSource pageRenderLinkSource;

    // The code

    // onPassivate() is called by Tapestry to get the activation context to put
    // in the URL.

    String onPassivate() {
        return arg1;
    }

    // onActivate() is called by Tapestry to pass in the activation context from
    // the URL.

    void onActivate(String arg1) throws Exception {
        this.arg1 = arg1;
    }

    Object onSuccess() {
        Link thisPage = pageRenderLinkSource.createPageRenderLinkWithContext(this.getClass(), onPassivate());
        page2.set("Hello", thisPage);
        return page2;
    }

}

examples.css


body            { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; color: #333; line-height: 17px; }
h1              { font-size: 26px; line-height: 20px; } /* For IE 7 */
form            { margin: 0; }                  

.eg             { margin: 20px 0; padding: 20px; color: #888; 
                    border: 1px solid #ddd; border-radius: 4px; -webkit-border-radius: 4px; -mox-border-radius: 4px; }

a               { text-decoration: none; color: #3D69B6; }
a:hover         { text-decoration: underline; }

/* For BeanDisplay */
.eg dl          { margin: 0; color: #333; }
.eg dl.t-beandisplay dd.id  { display: inline; margin-left: 0px; }  /* IE 7 hack */