<html><head> | |
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
<title>2.2. Execution</title><link rel="stylesheet" href="css/stylesheet.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.0"><link rel="home" href="index.html" title="Apache Click"><link rel="up" href="ch02.html" title="Chapter 2. Pages"><link rel="prev" href="ch02.html" title="Chapter 2. Pages"><link rel="next" href="ch02s03.html" title="2.3. Request Parameter Auto Binding"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.2. Execution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Pages</th><td width="20%" align="right"> <a accesskey="n" href="ch02s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="2.2. Execution"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="execution"></a>2.2. Execution</h2></div></div></div><p>The Page class provide a number of empty handler methods which | |
subclasses can override to provide functionality: | |
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onSecurityCheck()" target="_blank">onSecurityCheck()</a> | |
</p></li><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onInit()" target="_blank">onInit()</a> | |
</p></li><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onGet()" target="_blank">onGet()</a> | |
</p></li><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onPost()" target="_blank">onPost()</a> | |
</p></li><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onRender()" target="_blank">onRender()</a> | |
</p></li><li class="listitem"><p> | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#onDestroy()" target="_blank">onDestroy()</a> | |
</p></li></ul></div><p>The ClickServlet relies on instantiating Pages using a public no | |
arguments constructor, so when you create Page subclasses you must ensure | |
you don't add an incompatible constructor. The GET request execution sequence | |
for Pages is summarized below in the Figure 2. | |
</p><div class="figure"><a name="get-sequence-diagram"></a><div class="figure-contents"><span class="inlinemediaobject"><img src="images/pages/get-sequence-diagram.png" alt="GET Request Sequence Diagram"></span></div><p xmlns:fo="http://www.w3.org/1999/XSL/Format" class="title"><i>Figure 2.2. GET Request Sequence Diagram | |
</i></p></div><br class="figure-break"><p>Stepping through this GET request sequence, a new Page instance is | |
created and the attributes for the Page are set (format, headers, | |
path). Next, request parameter values are bound to any matching public | |
Page variables. | |
</p><p>Then the <code class="methodname">onSecurityCheck()</code> handler is executed. | |
This method can be used to ensure the user is authorized to access the page, | |
and if necessary abort any further processing. | |
</p><p>The next method invoked is <code class="methodname">onInit()</code>, this is | |
where you place any post constructor initialization code. | |
<code class="methodname">onInit()</code> is the ideal place to create controls such | |
as Forms, Fields and Tables. As illustrated by the diagram, after a Page's | |
<code class="methodname">onInit()</code> is called, each Control, available at that | |
stage, will have their <code class="methodname">onInit()</code> method called. | |
</p><p> | |
The next step is the processing of the Page's | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#controls" target="_blank">controls</a>. | |
The ClickServlet gets the list of Controls from the page and then iterates | |
through the list calling <code class="methodname">onProcess()</code>. If any of the | |
Control's <code class="methodname">onProcess()</code> methods return false, | |
processing of subsequent controls and the Page's <code class="methodname">onGet()</code> | |
method is aborted. | |
</p><p>If everything is executing normally the Page's | |
<code class="methodname">onGet()</code> method is now called. | |
</p><p>The next step is rendering the page template to generate the displayed | |
HTML. The ClickServlet gets the model (<code class="classname">Map</code>) from the | |
Page then adds the following objects to the model: | |
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>any public Page variable using the variable name</p></li><li class="listitem"><p>context - the Servlet context path, e.g. /mycorp</p></li><li class="listitem"><p>format - the | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/util/Format.html" target="_blank">Format</a> | |
object for formatting the display of objects. | |
</p></li><li class="listitem"><p>headElements - the HEAD <a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/element/Element.html" target="_blank">elements</a>, | |
excluding JavaScript, to include in the page header. Please see | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/util/PageImports.html" target="_blank">PageImports</a> | |
for more details. | |
</p></li><li class="listitem"><p>jsElements - the JavaScript imports and script blocks to | |
include in the pages footer. Please see | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/util/PageImports.html" target="_blank">PageImports</a> | |
for more details. | |
</p></li><li class="listitem"><p>messages - the | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/util/MessagesMap.html" target="_blank">MessagesMap</a> | |
adaptor for the Page | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#getMessage(java.lang.String)" target="_blank">getMessage()</a> | |
method | |
</p></li><li class="listitem"><p>path - the | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/Page.html#path" target="_blank">path</a> of | |
the page template to render | |
</p></li><li class="listitem"><p>request - the pages | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletRequest.html" target="_blank">HttpServletRequest</a> | |
object | |
</p></li><li class="listitem"><p>response - the pages | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletResponse.html" target="_blank">HttpServletResponse</a> | |
object | |
</p></li><li class="listitem"><p>session - the | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../click-api/org/apache/click/util/SessionMap.html" target="_blank">SessionMap</a> | |
adaptor for the users | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpSession.html" target="_blank">HttpSession</a> | |
</p></li></ul></div><p>It then merges the template with the page model and writes out results | |
to the HttpServletResponse. When the model is being merged with the template, | |
any Controls in the model may be rendered using their | |
<code class="methodname">toString()</code> method. | |
</p><p>The final step in this sequence is invoking each control's | |
<code class="methodname">onDestroy()</code> method and lastly invoke the Page's | |
<code class="methodname">onDestroy()</code> method. This method can be used to | |
clean up resource associated with the Control or Page before it is garbage | |
collected. The <code class="methodname">onDestroy()</code> method is guaranteed to | |
be called even if an exception occurs in the previous steps. | |
</p><p>The execution sequence for POST requests is almost identical, except | |
the <code class="methodname">onPost()</code> method is invoked instead on | |
<code class="methodname">onGet()</code>. See the | |
<a xmlns:fo="http://www.w3.org/1999/XSL/Format" class="external" href="../../../images/post-sequence-diagram.png" target="_blank">POST Request Sequence Diagram</a>. | |
</p><p>Another view on the execution flow of Pages is illustrated in the | |
Activity diagram below. | |
</p><div class="figure"><a name="activity-diagram"></a><div class="figure-contents"><span class="inlinemediaobject"><img src="images/pages/activity-diagram-small.png" alt="Page Execution Activity Diagram"></span></div><p xmlns:fo="http://www.w3.org/1999/XSL/Format" class="title"><i>Figure 2.3. Page Execution Activity Diagram | |
</i></p></div><br class="figure-break"></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Pages </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2.3. Request Parameter Auto Binding</td></tr></table></div></body></html> |