Author: rich
Date: Sun May 15 21:47:37 2005
New Revision: 170304
URL: http://svn.apache.org/viewcvs?rev=170304&view=rev
Log:
This is a contribution from Krista Baker to address
http://issues.apache.org/jira/browse/BEEHIVE-711 : beehive-netui-config.xml
elements added need to be documented .
In addition, I updated and filled in the docs for all the elements under
<pageflow-config>, and I fixed the sample config file at the bottom of the page
(it had gone out of date).
tests: ant validate under docs/forrest (WinXP)
BB: self (linux)
Modified:
incubator/beehive/trunk/docs/forrest/src/documentation/content/xdocs/pageflow/config/beehive-netui-config.xml
Modified:
incubator/beehive/trunk/docs/forrest/src/documentation/content/xdocs/pageflow/config/beehive-netui-config.xml
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/docs/forrest/src/documentation/content/xdocs/pageflow/config/beehive-netui-config.xml?rev=170304&r1=170303&r2=170304&view=diff
==============================================================================
---
incubator/beehive/trunk/docs/forrest/src/documentation/content/xdocs/pageflow/config/beehive-netui-config.xml
(original)
+++
incubator/beehive/trunk/docs/forrest/src/documentation/content/xdocs/pageflow/config/beehive-netui-config.xml
Sun May 15 21:47:37 2005
@@ -8,19 +8,18 @@
<section id="desc">
<title>Description</title>
<p>
- The <code>beehive-netui-config.xml</code> file configures the
runtime behavior of your Page Flow web
- app.
- </p>
+ The <code>beehive-netui-config.xml</code> file configures the
runtime behavior of your
+ Page Flow web application. It lives under the WEB-INF directory.
+ </p>
<p>Use <code>beehive-netui-config.xml</code> to declare interceptor
classes, override the default handler classes,
etc.</p>
</section>
<section id="structure">
<title>General Structure</title>
<source><a href="#netui-config"><netui-config></a>
- <a href="#legacy-tag-support"><legacy-tag-support></a>
<a href="#expression-languages"><expression-languages></a>
+ <a href="#default-language"><default-language></a>
<a href="#expression-language"><expression-language></a>
- <a href="#default-language"><default-language></a>
<a href="#name"><name></a>
<a href="#factory-class"><factory-class></a>
<a href="#binding-contexts"><binding-contexts></a>
@@ -54,20 +53,37 @@
<a href="#interceptor-class"><interceptor-class></a>
<a href="#custom-property"><custom-property></a>
<a href="#pageflow-handlers"><pageflow-handlers></a>
- <a href="#login-handler-class"><login-handler-class></a>
- <a
href="#forward-redirect-handler-class"><forward-redirect-handler-class></a>
- <a
href="#reloadable-class-handler-class"><reloadable-class-handler-class></a>
- <a href="#exceptions-handler-class"><exceptions-handler-class></a>
+ <a href="#action-forward-handler"><action-forward-handler></a>
+ <a href="#handler-class"><handler-class></a>
+ <a href="#custom-property"><custom-property></a>
+ <a href="#exceptions-handler"><exceptions-handler></a>
+ <a href="#handler-class"><handler-class></a>
+ <a href="#custom-property"><custom-property></a>
+ <a href="#forward-redirect-handler"><forward-redirect-handler></a>
+ <a href="#handler-class"><handler-class></a>
+ <a href="#custom-property"><custom-property></a>
+ <a href="#login-handler"><login-handler></a>
+ <a href="#handler-class"><handler-class></a>
+ <a href="#custom-property"><custom-property></a>
+ <a href="#reloadable-class-handler"><reloadable-class-handler></a>
+ <a href="#handler-class"><handler-class></a>
+ <a href="#custom-property"><custom-property></a>
<a href="#pageflow-config"><pageflow-config></a>
- <a href="#enable-renesting"><enable-renesting></a>
+ <a href="#enable-self-nesting"><enable-self-nesting></a>
<a href="#max-forwards-per-request"><max-forwards-per-request></a>
<a href="#max-nesting-stack-depth"><max-nesting-stack-depth></a>
<a href="#ensure-secure-forwards"><ensure-secure-forwards></a>
<a
href="#throw-session-expired-exception"><throw-session-expired-exception></a>
<a href="#multipart-handler"><multipart-handler></a>
+ <a href="#prevent-cache"><prevent-cache></a>
<a href="#module-config-locators"><module-config-locators></a>
- <a href="#description"><description></a>
- <a href="#locator-class"><locator-class></a>
+ <a href="#module-config-locator"><module-config-locator></a>
+ <a href="#description"><description></a>
+ <a href="#locator-class"><locator-class></a>
+ <a href="#default-shared-flow-refs"><default-shared-flow-refs></a>
+ <a href="#shared-flow-ref"><shared-flow-ref></a>
+ <a href="#name"><name></a>
+ <a href="#type"><type></a>
<a href="#type-converters"><type-converters></a>
<a href="#type-converter"><type-converter></a>
<a href="#type"><type></a>
@@ -88,10 +104,33 @@
<a href="#name"><name></a>
<a href="#factory-class"><factory-class></a>
<a href="#request-interceptors"><request-interceptors></a>
- <a href="#interceptor-class"><interceptor-class></a></source>
- </section>
+ <a href="#global"><global></a>
+ <a href="#request-interceptor"><request-interceptor></a>
+ <a href="#interceptor-class"><interceptor-class></a>
+ <a href="#custom-property"><custom-property></a>
+ <a href="#prefix-handlers"><prefix-handlers></a>
+ <a href="#prefix-handler"><prefix-handler></a>
+ <a href="#name"><name></a>
+ <a href="#handler-class"><handler-class></a>
+ </source></section>
<section id="elements">
<title>Elements</title>
+
+ <section
id="action-forward-handler"><title><action-forward-handler></title>
+ <p><strong>Syntax</strong></p>
+ <source><action-forward-handler>
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</action-forward-handler></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#handler-class"><handler-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
<section
id="action-interceptor"><title><action-interceptor></title>
<p><strong>Syntax</strong></p>
<source><action-interceptor>
@@ -121,7 +160,7 @@
<p><strong>Syntax</strong></p>
<source> <after-action> xsd:boolean
<after-action> [occurrences: 0-1] </source>
<p><strong>Parents:</strong></p>
- <p><a
href="#intercept-path"><intercept-path></a>
+ <p><a
href="#simple-action-interceptor"><simple-action-interceptor></a>
</p>
<p><strong>Children:</strong></p>
<p>none</p></section>
@@ -156,6 +195,7 @@
<p><a
href="#type-converter"><type-converter></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
+
<section id="custom-property"><title><custom-property></title>
<p><strong>Syntax</strong></p>
<source><custom-property>
@@ -163,10 +203,17 @@
<value> xsd:string </value> [occurrences: 1]
</custom-property></source>
<p><strong>Parents:</strong></p>
- <p><a
href="#action-interceptor"><action-interceptor></a></p>
+ <p><a
href="#action-interceptor"><action-interceptor></a>,
+ <a
href="#request-interceptor"><request-interceptor></a>,
+ <a
href="#action-forward-handler"><action-forward-handler></a>,
+ <a
href="#exceptions-handler"><exceptions-handler></a>,
+ <a
href="#forward-redirect-handler"><forward-redirect-handler></a>,
+ <a
href="#login-handler"><login-handler></a>,
+ <a
href="#reloadable-class-handler"><reloadable-class-handler></a></p>
<p><strong>Children:</strong></p>
<p><a href="#name"><name></a>,
<a href="#value"><value></a></p></section>
+
<section id="default-language"><title><default-language></title>
<p><strong>Syntax</strong></p>
<source><default-language> xsd:string
</default-language> [occurrences: 1]</source>
@@ -180,12 +227,16 @@
default shared flow references that can be used
across the web app.</p>
<p><strong>Syntax</strong></p>
<source><default-shared-flow-refs>
- <shared-flow-ref>
-</default-shared-flow-refs> [occurrences: 1-*]</source>
+ <shared-flow-ref>
+ <name> xsd:string </name> [occurrences: 1]
+ <type> xsd:string </type> [occurrences: 1]
+ </shared-flow-ref> [occurrences: 0-*]
+</default-shared-flow-refs></source>
<p><strong>Parents:</strong></p>
<p><a
href="#netui-config"><netui-config></a></p>
<p><strong>Children:</strong></p>
<p><a
href="#shared-flow-ref"><shared-flow-ref></a></p></section>
+
<section id="description"><title><description></title>
<p><strong>Syntax</strong></p>
<source><description> xsd:string
</description> [occurrences: 0-1]</source>
@@ -193,16 +244,42 @@
<p><a
href="#module-config-locator"><module-config-locator></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section id="doctype"><title><doctype></title>
+ <section id="doctype"><title><doctype gt;</title>
<p><strong>Syntax</strong></p>
<source><doctype> [ html4-loose |
xhtml1-transitional ] </doctype> [occurrences: 0-1]</source>
<p><strong>Parents:</strong></p>
<p><a
href="#jsp-tag-config"><jsp-tag-config></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section id="enable-renesting"><title><enable-renesting></title>
+ <section
id="enable-self-nesting"><title><enable-self-nesting></title>
+ <p>
+ When this value is set to <code>false</code> (the
default), a nested page flow that is
+ <em>anywhere</em> on the nesting stack will be
<em>reactivated</em> if one of its actions is hit,
+ and all page flows higher up the stack will be destroyed.
When this value is set to
+ <code>true</code>, a <em>new</em> instance of the nested
page flow will end up at the top of the
+ stack. As an example, consider the following stack of
page flows:
+ </p>
+ <source>A, B, C <sup>(top)</sup></source>
+ <p>
+ When an action in B is hit, one of two things will happen:
+ </p>
+ <ul>
+ <li>If <code>enable-self-nesting</code> is set to
<code>false</code>, then B will be
+ reactivated and C will be destroyed. The nesting
stack will look like this:
+ <source>A, B <sup>(top)</sup></source>
+ </li>
+ <li>If <code>enable-self-nesting</code> is set to
<code>true</code>, then a new instance of B
+ will be at the top of the stack, which will look like
this:
+ <source>A, B, C, B <sup>(top)</sup></source>
+ </li>
+ </ul>
+ <p>
+ Note that setting this value to <code>true</code> is
<strong>not back-button-friendly</strong>.
+ Hitting a Page Flow action after using the browser back
button can often end up executing an
+ action on a nested page flow in the middle of the nesting
stack.
+ </p>
<p><strong>Syntax</strong></p>
- <source><enable-renesting> xsd:boolean
</enable-renesting> [occurrences: 0-1]</source>
+ <source><enable-self-nesting> xsd:boolean
</enable-self-nesting> [occurrences: 0-1]</source>
<p><strong>Parents:</strong></p>
<p><a
href="#pageflow-config"><pageflow-config></a></p>
<p><strong>Children:</strong></p>
@@ -217,16 +294,25 @@
<p><a
href="#pageflow-config"><pageflow-config></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section
id="exceptions-handler-class"><title><exceptions-handler-class></title>
+
+ <section
id="exceptions-handler"><title><exceptions-handler></title>
<p>Typically, exceptions thrown by the controller
class are delivered in a wrapper exception
class. The class named here, can be
used to unwrap these exceptions and handle
the underlying exception in a more
fine-grained manner.</p>
<p><strong>Syntax</strong></p>
- <source><exceptions-handler-class>
xsd:string </exceptions-handler-class> [occurrences: 0-1]</source>
+ <source><exceptions-handler>
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</exceptions-handler></source>
<p><strong>Parents:</strong></p>
<p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
<p><strong>Children:</strong></p>
- <p>none</p></section>
+ <p><a
href="#handler-class"><handler-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
<section
id="expression-language"><title><expression-language></title>
<p><strong>Syntax</strong></p>
<source> <expression-language>
[occurrences: 1-*]
@@ -256,20 +342,33 @@
<p><a
href="#default-language"><default-language></a>,
<a
href="#expression-language"><expression-language></a>
</p></section>
+
<section id="factory-class"><title><factory-class></title>
<p><strong>Syntax</strong></p>
<source><factory-class> xsd:string
</factory-class> [occurrences: 1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#binding-contexts"><binding-contexts></a></p>
+ <p><a
href="#binding-contexts"><binding-contexts></a>,
+ <a
href="#expression-language"><expression-language></a>,
+ <a
href="#iterator-factory"><iterator-factory></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section
id="forward-redirect-handler-class"><title><forward-redirect-handler-class></title>
+
+ <section
id="forward-redirect-handler"><title><forward-redirect-handler></title>
<p><strong>Syntax</strong></p>
- <source><forward-redirect-handler-class>
xsd:string </forward-redirect-handler-class> [occurrences: 0-1]</source>
+ <source><forward-redirect-handler>
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</forward-redirect-handler></source>
<p><strong>Parents:</strong></p>
<p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
<p><strong>Children:</strong></p>
- <p>none</p></section>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#handler-class"><handler-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
<section id="global"><title><global></title>
<p><strong>Syntax</strong></p>
<source><global> [occurrences: 0-1]
@@ -284,12 +383,57 @@
<value> xsd:string </value> [occurrences: 1]
</custom-property> [occurrences: 0-*]
</action-interceptor> [occurrences: 0-*]
+</global>
+
+<global>
+ <request-interceptor>
+ <interceptor-class> xsd:string </interceptor-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+ </request-interceptor> [occurrences: 0-*]
</global></source>
<p><strong>Parents:</strong></p>
- <p><a
href="#pageflow-action-interceptors"><pageflow-action-interceptors></a></p>
+ <p><a
href="#pageflow-action-interceptors"><pageflow-action-interceptors></a>,
+ <a
href="#request-interceptors"><request-interceptors></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#simple-action-interceptor"><simple-action-interceptor></a>,
+ <a
href="#action-interceptor"><action-interceptor></a>,
+ <a
href="#request-interceptor"><request-interceptor></a></p></section>
+
+ <section id="handler-class"><title><handler-class></title>
+ <p><strong>Syntax</strong></p>
+ <source><handler-class> xsd:string
</handler-class> [occurrences: 1]</source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#action-forward-handler"><action-forward-handler></a>,
+ <a
href="#exceptions-handler"><exceptions-handler></a>,
+ <a
href="#forward-redirect-handler"><forward-redirect-handler></a>,
+ <a
href="#login-handler"><login-handler></a>,
+ <a
href="#reloadable-class-handler"><reloadable-class-handler></a>,
+ <a
href="#prefix-handler"><prefix-handler></a></p>
+ <p><strong>Children:</strong></p>
+ <p>none</p></section>
+
+
+ <section id="html-amp-entity"><title><html-amp-entity></title>
+<p>
+The url parameter separators of & (single amphersand) are encoded to
&amp; (ampersand followed by amp;) by default
+according to the html 401 specifications set forth by W3C. This item
+can be set to false and the parameter separators will not be encoded.
+</p>
+
+ <p><strong>Syntax</strong></p>
+ <p><strong>Syntax</strong></p>
+ <source><html-amp-entity> xsd:boolean
</html-amp-entity> [occurrences: 1]</source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#url-config"><url-config<</a></p>
<p><strong>Children:</strong></p>
- <p><a
href="#simple-action-inteceptor"><simple-action-inteceptor></a>,
- <a
href="#action-inteceptor"><action-inteceptor></a></p></section>
+ <p>none</p></section>
+
+
+
+
<section id="id-javascript"><title><id-javascript></title>
<p><strong>Syntax</strong></p>
<source><id-javascript> [ default | legacy |
legacyOnly ] </id-javascript> [occurrences: 0-1]</source>
@@ -297,13 +441,16 @@
<p><a
href="#jsp-tag-config"><jsp-tag-config></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
+
<section
id="interceptor-class"><title><interceptor-class></title>
<p><strong>Syntax</strong></p>
<source><interceptor-class> xsd:string
<interceptor-class> [occurrences: 1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#jsp-tag-config"><jsp-tag-config></a></p>
+ <p><a
href="#action-interceptor"><action-interceptor></a>,
+ <a
href="#request-interceptor"><request-interceptor></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
+
<section id="intercept-path"><title><intercept-path></title>
<p><strong>Syntax</strong></p>
<source><intercept-path> xsd:string
</intercept-path> [occurrences: 1]</source>
@@ -331,7 +478,7 @@
<factory-class> xsd:string </factory-class> [occurrences: 1]
</iterator-factory></source>
<p><strong>Parents:</strong></p>
- <p><a
href="#iterator-factorys"><iterator-factorys></a></p>
+ <p><a
href="#iterator-factories"><iterator-factories></a></p>
<p><strong>Children:</strong></p>
<p><a href="#name"><name></a>,
<a
href="#factory-class"><factory-class></a></p></section>
@@ -350,28 +497,29 @@
<a
href="#id-javascript"><id-javascript></a>,
<a
href="#tree-image-location"><tree-image-location></a>,</p></section>
- <section
id="legacy-tag-support"><title><legacy-tag-support></title>
- <p><strong>Syntax</strong></p>
- <source><legacy-tag-support> xsd:boolean
</legacy-tag-support> [occurrences: 0-1]</source>
- <p><strong>Parents:</strong></p>
- <p><a
href="#netui-config"><netui-config></a></p>
- <p><strong>Children:</strong></p>
- <p>none</p></section>
-
<section id="locator-class"><title><locator-class></title>
<p><strong>Syntax</strong></p>
<source><locator-class> xsd:string
</locator-class> [occurrences: 1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#module-config-locators"><module-config-locators></a></p>
+ <p><a
href="#module-config-locator"><module-config-locator></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section
id="login-handler-class"><title><login-handler-class></title>
+
+ <section id="login-handler"><title><login-handler></title>
<p><strong>Syntax</strong></p>
- <source><login-handler-class> xsd:string
</login-handler-class> [occurrences: 0-1]</source>
+ <source><login-handler>
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</login-handler></source>
<p><strong>Parents:</strong></p>
<p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
<p><strong>Children:</strong></p>
- <p>none</p></section>
+ <p><a
href="#handler-class"><handler-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
<section
id="max-forwards-per-request"><title><max-forwards-per-request></title>
<p>If the number of server
forwards exceeds the given count, an error is written to the response
and no further
@@ -388,8 +536,7 @@
return new Forward( "self" );
}]]></source>
-<p>If the jpf-forward-overflow-count parameter is omitted from the web.xml
file,
-the error will be written to the response after 50 server forwards within a
single request. ÃÂ
+<p>If this element is omitted, the error will be written to the response after
25 server forwards within a single request.
</p>
<p>When an application is in development, a descriptive error is sent; for
deployed applications, a 500 response is sent.</p>
<p><strong>Syntax</strong></p>
@@ -403,7 +550,7 @@
<section
id="max-nesting-stack-depth"><title><max-nesting-stack-depth></title>
<p>
This parameter sets the maximum size of the Page Flow nesting stack.
- If Page Flows are repeatedly nested until the stack exceeds the
specified value,
+ If page flows are repeatedly nested until the stack size exceeds the
specified value,
an error is written to the response object and any further nesting is
not allowed.
This helps prevent the nesting stack from consuming large amounts of
resources.</p>
<p>When an application is in development, a descriptive error is sent; for
deployed applications, a 500 response is sent.</p>
@@ -429,9 +576,10 @@
<section
id="module-config-locators"><title><module-config-locators></title>
<p>Names a class or group of classes that know the
location of the web application's
- Struts configuration files. By default these
configuation files are saved to
-
<code>WEB-INF/.pageflow-struts-generated/</code>. But, in cases where this
default location
- has been overridden by a custom compilation
process, use <code><module-config-locators></code> to point to a Java class
that knows the
+ Struts module configuration files. By default
these configuation files are saved to
+
<code>WEB-INF/.pageflow-struts-generated/</code>. In cases where this default
location
+ has been overridden or augmented by a custom
compilation process, use
+ <code><module-config-locators></code> to point to a Java
class that knows the
new location. </p>
<p><strong>Syntax</strong></p>
<source><module-config-locators>
[occurrences: 0-1]
@@ -446,22 +594,24 @@
<p><a
href="#module-config-locator"><module-config-locator></a></p></section>
<section
id="multipart-handler"><title><multipart-handler></title>
- <p>By default multi-part file uploading is disabled
for page flow web applications.
+ <p>By default multi-part file uploading is disabled
for Page Flow web applications.
To turn it on, you must (1) explicitly
set this element to <code>memory</code>
- or <code>disk</code>, or (2) decorate a
given controller class with
- the @Jpf.MultipartHandler annotation.
Doing (1) will enable file uploading across
- the entire web applcation, doing (2)
enables file uploading on a
+ or <code>disk</code>, or (2) set the
<code>multipartHandler</code> attribute on
+ a page flow's @Jpf.Controller annotation. Doing (1)
will enable file uploading across
+ the entire web applcation; doing (2)
enables file uploading on a
controller-by-controller basis.</p>
+ <p><strong>Also see:</strong></p>
+ <p>
+ <a
href="../../apidocs/classref_pageflows/org/apache/beehive/netui/pageflow/annotations/Jpf.Controller.html#multipartHandler()">
+ Attribute multipartHandler on annotation interface
org.apache.beehive.netui.pageflow.annotations.Jpf
+ </a>
+ </p>
<p><strong>Syntax</strong></p>
<source><multipart-handler> [ disabled |
memory | disk ] </multipart-handler> [occurrences: 0-1]</source>
<p><strong>Parents:</strong></p>
<p><a
href="#pageflow-config"><pageflow-config></a></p>
<p><strong>Children:</strong></p>
- <p>none</p>
- <p>
- To disable file upload, set the value to "none".
- [todo: other values include memory, ?, ...]</p>
- </section>
+ <p>none</p></section>
<section id="name"><title><name></title>
<p><strong>Syntax</strong></p>
@@ -470,55 +620,77 @@
<p><a
href="#expression-language"><expression-language></a>,
<a
href="#iterator-factory"><iterator-factory></a>,
<a
href="#binding-context"><binding-context></a>,
- <a
href="#custom-property"><custom-property></a></p>
+ <a
href="#custom-property"><custom-property></a>,
+ <a
href="#shared-flow-ref"><shared-flow-ref></a>,
+ <a
href="#prefix-handler"><prefix-handler></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
<section id="netui-config">
<title><netui-config></title>
<p>
- The top-level element in the <code>beehive-netui-config.xml</code>
file.
- ÃÂ </p>
+ The top-level element in the <code>beehive-netui-config.xml</code>
file.</p>
<p><strong>Syntax</strong></p>
<source><netui-config>
- <legacy-tag-support> xsd:boolean </legacy-tag-support> [occurrences:
0-1]
<expression-languages> ... </expression-languages> [occurrences: 1]
<pageflow-action-interceptors> ... </pageflow-action-interceptors>
[occurrences: 0-1]
<pageflow-handlers> ... </pageflow-handlers> [occurrences: 0-1]
<pageflow-config> ... </pageflow-config> [occurrences: 0-1]
+ <default-shared-flow-refs> ... </default-shared-flow-refs>
[occurrences: 0-1]
<type-converters> ... </type-converters> [occurrences: 0-1]
<jsp-tag-config> ... </jsp-tag-config> [occurrences: 0-1]
+ <url-config> ... </url-config> [occurrences: 0-1]
<iterator-factories> ... </iterator-factories> [occurrences: 0-1]
<request-interceptors> ... </request-interceptors> [occurrences: 0-1]
+ <prefix-handlers> ... </prefix-handlers> [occurrences: 0-1]
</netui-config></source>
<p><strong>Parents:</strong></p>
<p></p>
<p><strong>Children:</strong></p>
- <p> <a
href="#legacy-tag-support"><legacy-tag-support></a>,
- <a href="#expression-languages"><expression-languages></a>,
+ <p> <a
href="#expression-languages"><expression-languages></a>,
<a
href="#pageflow-action-interceptors"><pageflow-action-interceptors></a>,
<a href="#pageflow-handlers"><pageflow-handlers></a>,
<a href="#pageflow-config"><pageflow-config></a>,
+ <a href="#default-shared-flow-refs"><default-shared-flow-refs></a>,
<a href="#type-converters"><type-converters></a>,
<a href="#jsp-tag-config"><jsp-tag-config></a>,
+ <a href="#url-config"><url-config></a>,
<a href="#iterator-factories"><iterator-factories></a>,
- <a href="#request-interceptors"><request-interceptors></a></p>
+ <a href="#request-interceptors"><request-interceptors></a>,
+ <a href="#prefix-handlers"><prefix-handlers></a></p>
</section>
<section id="pageflow-action-interceptors">
<title><pageflow-action-interceptors></title>
- <p>If you want to be notified before (or after) every action
that's run in the webapp,
+ <p>To run code before or after Page Flow actions,
you configure a <pageflow-action-interceptor> group.
A simple example of this would be a monitoring infrastructure
that keeps track of the number of actions raised. To keep track of the number
of actions raised,
register an interceptor
that runs the counting code before going to any action. A more complex example
-is an interceptor that *redirects* you to another page flow before allowing
you
-to go to the current one; for instance, it might take you to a nested page
flow
+is an interceptor that "injects" a page flow before allowing you
+to go to the current one; for instance, it might decide (on the fly) to take
you to a nested page flow
that asks you to fill out a "satisfaction survey" before sending you to the
destination page flow. </p>
-<p>The action-intercepting class is run twice: <em>both</em> before
<em>and</em> after the execution of the
- action.</p>
+<p>
+ The action-intercepting class is run twice: both before <em>and</em> after
the execution of the
+ action. When run before an action, it can do three things:
+</p>
+ <ul>
+ <li>change the destination URI and thus prevent the action from
running, or,</li>
+ <li>set the destination URI to <code>null</code> (no forwarding) and
thus prevent the action from running, or,</li>
+ <li>
+ "inject" an entire nested page flow to run before the action is
invoked. If the override forward URI
+ is a nested page flow, then it will run until it raises one of
its return actions. At that point,
+ <code>afterNestedIntercept</code> is called on <em>this
interceptor</em>, which can again choose to override
+ the forward or allow the original action to run.
+ </li>
+ </ul>
+ <p>When run after an action, it can do two things:</p>
+ <ul>
+ <li>change the destination URI that was returned by the action,
or,</li>
+ <li>set the destination URI to <code>null</code> (no
forwarding).</li>
+ </ul>
<p><strong>Also see:</strong></p>
<p><a
href="../../apidocs/classref_pageflows/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.html">Interface
org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor</a></p>
<p><strong>Syntax</strong></p>
@@ -548,59 +720,72 @@
<title><pageflow-config></title>
<p><strong>Syntax</strong></p>
<source><pageflow-config>
- <enable-renesting> xsd:boolean </enable-renesting> [occurrences:
0-1]
+ <enable-self-nesting> xsd:boolean </enable-self-nesting>
[occurrences: 0-1]
<max-forwards-per-request> xsd:int </max-forwards-per-request>
[occurrences: 0-1]
<max-nesting-stack-depth> xsd:int </max-nesting-stack-depth>
[occurrences: 0-1]
<ensure-secure-forwards> xsd:boolean </ensure-secure-forwards>
[occurrences: 0-1]
<throw-session-expired-exception> xsd:boolean
</throw-session-expired-exception> [occurrences: 0-1]
<multipart-handler> [ disabled | memory | disk ]
</multipart-handler> [occurrences: 0-1]
+ <prevent-cache> [ default | always | inDevMode ] </prevent-cache>
[occurrences: 0-1]
<module-config-locators> ... </module-config-locators>
[occurrences: 0-1]
</pageflow-config></source>
<p><strong>Parents:</strong></p>
<p><a
href="#netui-config"><netui-config></a></p>
<p><strong>Children:</strong></p>
- <p><a
href="#enable-renesting"><enable-renesting></a>,
+ <p><a
href="#enable-self-nesting"><enable-self-nesting></a>,
<a
href="#max-forwards-per-request"><max-forwards-per-request></a>,
<a
href="#max-nesting-stack-depth"><max-nesting-stack-depth></a>,
<a
href="#ensure-secure-forwards"><ensure-secure-forwards></a>,
<a
href="#throw-session-expired-exception"><throw-session-expired-exception></a>,
<a
href="#multipart-handler"><multipart-handler></a>,
- <a
href="#module-config-locators"><module-config-locators></a>,
+ <a
href="#prevent-cache"><prevent-cache></a>,
+ <a
href="#module-config-locators"><module-config-locators></a>
</p>
<p>
Configures the page flow
runtime across the webapp. If you want to disable file-upload, for instance,
-you set the multipart-handler to "none". There will be more settings here
soon.
- ÃÂ </p>
- </section>
+you set the multipart-handler to "disabled".</p></section>
<section id="pageflow-handlers">
<title><pageflow-handlers></title>
<p>
These settings let you override base framework behavior.
-A good example is the LoginHandler. By default, we use standard Servlet
-APIs to see if you're logged in, and we use some server-specific APIs to
-actually log you in when login() is called inside a page flow.
+A good example is the LoginHandler. By default, standard Servlet
+APIs are used to determine whether a user is logged in, and
+server-specific APIs are used to actually log in a user when
+<code>login()</code> is called inside a page flow.
If you want to replace this behavior with your own login scheme
(which may look at a User database table for login information),
-you can provide your own LoginHandler that defines methods like login() and
isUserInRole().
+you can provide your own LoginHandler that defines methods like
+<code>login()</code> and <code>isUserInRole()</code>.
</p>
<p><strong>Syntax</strong></p>
<source><pageflow-handlers>
- <login-handler-class> xsd:string </login-handler-class>
[occurrences: 0-1]
- <forward-redirect-handler-class> xsd:string
</forward-redirect-handler-class> [occurrences: 0-1]
- <reloadable-class-handler-class> xsd:string
</reloadable-class-handler-class> [occurrences: 0-1]
- <exceptions-handler-class> xsd:string </exceptions-handler-class>
[occurrences: 0-1]
+ <action-forward-handler> [occurrences: 0-*]
+ <handler-class> xsd:string </handler-class> [occurrences:
1]
+ </action-forward-handler>
+ <exceptions-handler> [occurrences: 0-*]
+ <handler-class> xsd:string </handler-class> [occurrences:
1]
+ </exceptions-handler>
+ <forward-redirect-handler> [occurrences: 0-*]
+ <handler-class> xsd:string </handler-class> [occurrences:
1]
+ </forward-redirect-handler>
+ <login-handler> [occurrences: 0-*]
+ <handler-class> xsd:string </handler-class> [occurrences:
1]
+ </login-handler>
+ <reloadable-class-handler> [occurrences: 0-*]
+ <handler-class> xsd:string </handler-class> [occurrences:
1]
+ </reloadable-class-handler>
</pageflow-handlers></source>
<p><strong>Parents:</strong></p>
<p><a
href="#netui-config"><netui-config></a></p>
<p><strong>Children:</strong></p>
- <p><a
href="#login-handler-class"><login-handler-class></a>,
- <a
href="#forward-redirect-handler-class"><forward-redirect-handler-class></a>,
- <a
href="#reloadable-class-handler-class"><reloadable-class-handler-class></a>,
- <a
href="#exceptions-handler-class"><exceptions-handler-class></a></p>
- </section>
+ <p><a
href="#action-forward-handler"><action-forward-handler></a>,
+ <a
href="#exceptions-handler"><exceptions-handler></a>,
+ <a
href="#forward-redirect-handler"><forward-redirect-handler></a>,
+ <a
href="#login-handler"><login-handler></a>,
+ <a
href="#reloadable-class-handler"><reloadable-class-handler></a></p></section>
<section id="pageflow-uri"><title><pageflow-uri></title>
<p><strong>Syntax</strong></p>
@@ -644,28 +829,113 @@
<a
href="#action-interceptor"><action-interceptor></a>,
<a
href="#per-action"><per-action></a></p></section>
- <section
id="reloadable-class-handler-class"><title><reloadable-class-handler-class></title>
+
+ <section id="prefix-handler"><title><prefix-handler></title>
+ <p><strong>Syntax</strong></p>
+ <source><prefix-handler>
+ <name> xsd:string </name> [occurrences: 1]
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+</prefix-handler></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#prefix-handlers"><prefix-handlers></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a href="#name"><name></a>,
+ <a
href="#handler-class"><handler-class></a></p></section>
+
+ <section id="prefix-handlers"><title><prefix-handlers></title>
+ <p><strong>Syntax</strong></p>
+ <source><prefix-handlers>
+ <prefix-handler> [occurrences: 0-*]
+ <name> xsd:string </name> [occurrences: 1]
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ </prefix-handler>
+</prefix-handlers></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#netui-config"><netui-config></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#prefix-handler"><prefix-handler></a></p></section>
+
+
+
+
+
+ <section id="prevent-cache"><title><prevent-cache></title>
+ <p>
+ This setting configures browser caching behavior for pages
returned from Page Flow actions.
+ Setting it to <code>always</code> causes no-cache headers
to be added to the HTTP response,
+ specifying that pages are <strong>never</strong> cached.
Setting it to <code>inDevMode</code>
+ means that pages may be cached only when the server is in
production mode.
+ </p>
<p><strong>Syntax</strong></p>
- <source><reloadable-class-handler-class>
xsd:string </reloadable-class-handler-class> [occurrences: 0-1]</source>
+ <source><prevent-cache> [ default | always |
inDevMode ] </prevent-cache> [occurrences: 0-1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
+ <p><a
href="#pageflow-config"><pageflow-config></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
+ <section
id="reloadable-class-handler"><title><reloadable-class-handler></title>
+ <p><strong>Syntax</strong></p>
+ <source><reloadable-class-handler>
+ <handler-class> xsd:string </handler-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</reloadable-class-handler></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#pageflow-handlers"><pageflow-handlers></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#handler-class"><handler-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
+ <section id="request-interceptor">
+ <title><request-interceptor></title>
+ <p><strong>Syntax</strong></p>
+ <source><request-interceptor>
+ <interceptor-class> xsd:string </interceptor-class> [occurrences: 1]
+ <custom-property>
+ <name> xsd:string </name> [occurrences: 1]
+ <value> xsd:string </value> [occurrences: 1]
+ </custom-property> [occurrences: 0-*]
+</request-interceptor></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#global"><global></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#interceptor-class"><interceptor-class></a>,
+ <a
href="#custom-property"><custom-property></a></p></section>
+
<section id="request-interceptors">
<title><request-interceptors></title>
<p><strong>Syntax</strong></p>
<source><request-interceptors>
- <interceptor-class> xsd:string </interceptor-class> [occurrences: 1-*]
+ <global> [occurrences: 0-1]
+ <request-interceptor> [occurrences: 0-*]
+ <interceptor-class> xsd:string </interceptor-class> [occurrences:
1]
+ <custom-property> ... </custom-property> [occurrences: 0-*]
+ </request-interceptor>
+ </global>
</request-interceptors></source>
<p><strong>Parents:</strong></p>
<p><a
href="#netui-config"><netui-config></a></p>
<p><strong>Children:</strong></p>
- <p><a
href="#interceptor-class"><interceptor-class></a></p></section>
+ <p><a
href="#global"><global></a></p></section>
+
+ <section id="shared-flow-ref">
+ <title><shared-flow-ref></title>
+ <p><strong>Syntax</strong></p>
+ <source><shared-flow-ref>
+ <name> xsd:string </name> [occurrences: 1]
+ <type> xsd:string </type> [occurrences: 1]
+</shared-flow-ref></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#default-shared-flow-refs"><default-shared-flow-refs></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a href="#name"><name></a>,
+ <a href="#type"><type></a></p></section>
<section
id="simple-action-interceptor"><title><simple-action-interceptor></title>
<p><strong>Syntax</strong></p>
- <source><simple-action-interceptor>
+ <source><simple-action-intercept r>
<intercept-path> xsd:string </intercept-path> [occurrences: 1]
<after-action> xsd:boolean </after-action> [occurrences: 0-1]
</simple-action-interceptor></source>
@@ -674,18 +944,18 @@
<p><strong>Children:</strong></p>
<p>none</p></section>
- <section id="shared-flow-ref"><title><shared-flow-ref></title>
- <p><strong>Syntax</strong></p>
- <source><shared-flow-ref>
- <name> xsd:string </name> [occurrences: 1]
- <type> xsd:string </type> [occurrences: 1]
-</shared-flow-ref></source>
- <p><strong>Parents:</strong></p>
- <p><a
href="#netui-config"><netui-config></a></p>
- <p><strong>Children:</strong></p>
- <p><a href="#name"><name></a>, <a
href="#type"><type></a></p></section>
-
<section
id="throw-session-expired-exception"><title><throw-session-expired-exception></title>
+ <p>
+ When set to <code>true</code> (the default), this causes a
<code>SessionExpiredException</code> to
+ be thrown in place of some other Page Flow exceptions when
the root cause is most likely the
+ expiration of the user session.
+ </p>
+ <p><strong>Also see:</strong></p>
+ <p>
+ <a
href="../../apidocs/classref_pageflows/org/apache/beehive/netui/pageflow/SessionExpiredException.html">
+ Class
org.apache.beehive.netui.pageflow.SessionExpiredException
+ </a>
+ </p>
<p><strong>Syntax</strong></p>
<source><throw-session-expired-exception>
xsd:boolean </throw-session-expired-exception> [occurrences: 0-1]</source>
<p><strong>Parents:</strong></p>
@@ -705,7 +975,8 @@
<p><strong>Syntax</strong></p>
<source><type> xsd:string </type>
[occurrences: 1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#type-converter"><type-converter></a></p>
+ <p><a
href="#type-converter"><type-converter></a>,
+ <a
href="#shared-flow-ref"><shared-flow-ref></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
@@ -718,7 +989,8 @@
<p><strong>Parents:</strong></p>
<p><a
href="#type-converters"><type-converters></a></p>
<p><strong>Children:</strong></p>
- <p>none</p></section>
+ <p><a href="#type"><type></a>,
+ <a
href="#converter-class"><converter-class></a></p></section>
<section id="type-converters"><title><type-converters></title>
<p><strong>Syntax</strong></p>
@@ -733,24 +1005,46 @@
<p><strong>Children:</strong></p>
<p><a
href="#type-converter"><type-converter></a></p></section>
+ <section id="url-config"><title><url-config></title>
+ <p><strong>Syntax</strong></p>
+ <source><url-config>
+ <url-encode-urls> xsd:boolean </url-encode-urls> [occurrences: 0-1]
+ <html-amp-entity> xsd:boolean </html-amp-entity> [occurrences: 0-1]
+</url-config></source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#netui-config"><netui-config></a></p>
+ <p><strong>Children:</strong></p>
+ <p><a
href="#url-encode-urls"><url-encode-urls></a>,
+ <a
href="#html-amp-entity"><html-amp-entity></a></p></section>
+
+ <section id="url-encode-urls"><title><url-encode-urls></title>
+<p>
+This setting allows you to override the default of encoding the urls for
+tags with href attributes so that already encoded urls will not be re-encoded.
+</p>
+ <p><strong>Syntax</strong></p>
+ <source><url-encode-urls> xsd:boolean
</url-encode-urls> [occurrences: 1]</source>
+ <p><strong>Parents:</strong></p>
+ <p><a
href="#url-config"><url-config></a></p>
+ <p><strong>Children:</strong></p>
+ <p>none</p></section>
+
<section id="value"><title><value></title>
<p><strong>Syntax</strong></p>
<source><value> xsd:string </value>
[occurrences: 1]</source>
<p><strong>Parents:</strong></p>
- <p><a
href="#custom-property"><custom-property></a></p>
+ <p><a href="#custom-propert
"><custom-property></a></p>
<p><strong>Children:</strong></p>
<p>none</p></section>
</section>
<section>
<title>Example</title>
<p>
- Use the following example <code>netui-config.xsd</code> file as a
template.</p>
+ Use the following example <code>netui-config.xsd</code> file as a
guide.</p>
<source><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<netui-config xmlns="http://beehive.apache.org/netui/2004/server/config">
- <legacy-tag-support>false</legacy-tag-support>
-
<expression-languages>
<default-language>netuiel</default-language>
<expression-language>
@@ -761,37 +1055,33 @@
<pageflow-action-interceptors>
<global>
- <before-action>
- <action-interceptor>
-
<interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor</interceptor-class>
- </action-interceptor>
- <action-interceptor>
-
<interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor2</interceptor-class>
- </action-interceptor>
- </before-action>
- <after-action>
- <action-interceptor>
-
<interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor</interceptor-class>
- </action-interceptor>
- <action-interceptor>
-
<interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor2</interceptor-class>
- </action-interceptor>
- </after-action>
+ <action-interceptor>
+ <!-- This interceptor is run before/after ALL page flow
actions. -->
+
<interceptor-class>example.GlobalInterceptor</interceptor-class>
+ <custom-property>
+ <name>someCustomProperty</name>
+ <value>someValue</value>
+ </custom-property>
+ </action-interceptor>
</global>
+ <per-pageflow>
+ <pageflow-uri>/example/intercepted1/Controller.jpf</pageflow-uri>
+ <!-- This simple interceptor is run before any action in
/example/nested/SomeNestedController.jpf.
+ It "injects" a nested page flow before allowing the original
action to run. -->
+ <simple-action-interceptor>
+
<intercept-path>/example/nested/SomeNestedController.jpf</intercept-path>
+ </simple-action-interceptor>
+ </per-pageflow>
</pageflow-action-interceptors>
<pageflow-handlers>
-
<forward-redirect-handler-class>pageFlowCore.forwards.Controller$Redirector</forward-redirect-handler-class>
+ <login-handler>
+ <handler-class>example.CustomLoginHandler</handler-class>
+ </login-handler>
</pageflow-handlers>
<pageflow-config>
<multipart-handler>memory</multipart-handler>
- <module-config-locators>
- <module-config-locator>
- <description>For /miniTests/moduleConfigLocator.</description>
- <locator-class>moduleConfigLocator.Locator1</locator-class>
- </module-config-locator>
- </module-config-locators>
</pageflow-config>
<jsp-tag-config>