Return Types (1)

Event handler methods control what is displayed next by what they return.
The following EventLinks demonstrate all of the return types that Tapestry allows:
void - redisplay the same page.
null - redisplay the same page.
false - redisplay the same page.
true - redisplay same page, aborting event bubbling (see Event Bubbling example).
String (must be a logical page name) - go to new page.
Class (must be a page class) - go to new page.
page instance - go to new page. The page may have been configured (by calling its methods).
Link - go to new page. The link may include a context.
StreamResponse - used by pages or components to return images, PDFs, XML, etc. See also the Web Services example.
URL - go to a java.net.URL of an external page.
HttpError - returns an HTTP status code.
References: Component Event Requests, HttpError, Link, ComponentResources, StreamResponse, the Streaming Data section of Tapestry 5 How Tos, If.

Home


<!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_4.xsd">
<body class="container">
    <h3>Return Types (1)</h3>
    
    Event handler methods control what is displayed next by what they return. <br/>
    The following EventLinks demonstrate all of the return types that Tapestry allows:
    <div class="eg">
        <t:eventlink event="returnvoid">void</t:eventlink> - redisplay the same page.<br/>
        <t:eventlink event="returnnull">null</t:eventlink> - redisplay the same page.<br/>
        <t:eventlink event="returnfalse">false</t:eventlink> - redisplay the same page.<br/>
        <t:eventlink event="returntrue">true</t:eventlink> - redisplay same page, aborting event bubbling (see Event Bubbling example).<br/>
        <t:eventlink event="returnstring">String (must be a logical page name)</t:eventlink> - go to new page.<br/>
        <t:eventlink event="returnclass">Class (must be a page class)</t:eventlink> - go to new page.<br/>
        <t:eventlink event="returnpageinstance">page instance</t:eventlink> - go to new page. The page may have been configured (by calling its methods).<br/>
        <t:eventlink event="returnlink">Link</t:eventlink> - go to new page. The link may include a context.<br/>
        <t:eventlink event="returnstreamresponse">StreamResponse</t:eventlink> - used by pages or components to return images, PDFs, XML, etc. 
            See also the Web Services example.<br/>
        <t:eventlink event="returnurl">URL</t:eventlink> - go to a java.net.URL of an external page.<br/>
        <t:eventlink event="returnhttperror">HttpError</t:eventlink> - returns an 
            <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">HTTP status code</a>.<br/>
        
        <t:if t:test="message">
            <br/>
            <div class="alert alert-info">
                ${message}
            </div>
        </t:if>
    </div>

    References: 
    <a href="http://tapestry.apache.org/page-navigation.html#PageNavigation-ComponentEventRequests&amp;Responses">Component Event Requests</a>, 
    <a href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpError.html">HttpError</a>, 
    <a href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/Link.html">Link</a>, 
    <a href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a>, 
    <a href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/StreamResponse.html">StreamResponse</a>, 
    the Streaming Data section of <a href="http://wiki.apache.org/tapestry/Tapestry5HowTos#Streaming_Data">Tapestry 5 How Tos</a>, 
    <a href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/corelib/components/If.html">If</a>.<br/><br/>
    
    <t:pagelink page="Index">Home</t:pagelink><br/><br/>

    <t:tabgroup>
        <t:sourcecodetab src="/web/src/main/java/jumpstart/web/pages/examples/navigation/ReturnTypes1.tml"/>
        <t:sourcecodetab src="/web/src/main/java/jumpstart/web/pages/examples/navigation/ReturnTypes1.java"/>
        <t:sourcecodetab src="/web/src/main/resources/META-INF/assets/css/examples/plain.css"/>
        <t:sourcecodetab src="/web/src/main/java/jumpstart/web/text/examples/ReturnTypeText.txt"/>
    </t:tabgroup>
</body>
</html>


package jumpstart.web.pages.examples.navigation;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.tapestry5.Link;
import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.HttpError;
import org.apache.tapestry5.services.PageRenderLinkSource;
import org.apache.tapestry5.services.Response;

@Import(stylesheet = "css/examples/plain.css")
public class ReturnTypes1 {

    @Property
    @Persist(PersistenceConstants.FLASH)
    private String message;

    void onReturnVoid() {
        message = "You chose to return void.";
    }

    Object onReturnNull() {
        message = "You chose to return null.";
        return null;
    }

    boolean onReturnFalse() {
        message = "You chose to return false.";
        return false;
    }

    boolean onReturnTrue() {
        message = "You chose to return true.";
        return true;
    }

    Class<ReturnTypesClass> onReturnClass() {
        return ReturnTypesClass.class;
    }

    String onReturnString() {
        return "examples/navigation/ReturnTypesString";
    }

    @InjectPage
    private ReturnTypesPageInstance pageInstance;

    Object onReturnPageInstance() {
        pageInstance.set("Hello");
        return pageInstance;
    }

    @Inject
    private PageRenderLinkSource pageRenderLinkSource;

    Link onReturnLink() {
        String parameters = "Howdy";
        Link link = pageRenderLinkSource.createPageRenderLinkWithContext(ReturnTypesLink.class, parameters);
        return link;
    }

    StreamResponse onReturnStreamResponse() {
        return new StreamResponse() {
            InputStream inputStream;

            @Override
            public void prepareResponse(Response response) {
                ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
                inputStream = classLoader.getResourceAsStream("jumpstart/web/text/examples/ReturnTypeText.txt");

                // Set content length to prevent chunking - see
                // http://tapestry-users.832.n2.nabble.com/Disable-Transfer-Encoding-chunked-from-StreamResponse-td5269662.html#a5269662

                try {
                    response.setHeader("Content-Length", "" + inputStream.available());
                }
                catch (IOException e) {
                    // Ignore the exception in this simple example.
                }
            }

            @Override
            public String getContentType() {
                return "text/plain";
            }

            @Override
            public InputStream getStream() throws IOException {
                return inputStream;
            }
        };
    }

    URL onReturnURL() throws MalformedURLException {
        return new URL("http://tapestry.apache.org");
    }

    HttpError onReturnHttpError() {
        return new HttpError(404, "Page not found");
    }

}


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


You chose to return a StreamResponse which has streamed this text file, ReturnTypeText.txt.