You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by rs...@apache.org on 2015/06/01 11:41:36 UTC
svn commit: r1682851 [2/3] -
/deltaspike/site/trunk/content/staging/documentation/
Modified: deltaspike/site/trunk/content/staging/documentation/jsf.html
URL: http://svn.apache.org/viewvc/deltaspike/site/trunk/content/staging/documentation/jsf.html?rev=1682851&r1=1682850&r2=1682851&view=diff
==============================================================================
--- deltaspike/site/trunk/content/staging/documentation/jsf.html (original)
+++ deltaspike/site/trunk/content/staging/documentation/jsf.html Mon Jun 1 09:41:35 2015
@@ -281,7 +281,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_project_setup">Project Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The configuration information provided here is for Maven-based projects and it assumes that you have already declared the DeltaSpike version and DeltaSpike Core module for your projects, as detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a>. For Maven-independent projects, see <a href="configure.html#config-maven-indep">Configure DeltaSpike in Maven-independent Projects</a>.</p>
@@ -321,12 +321,6 @@ table.CodeRay td.code>pre{padding:0}
<span class="tag"></dependency></span></code></pre>
</div>
</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
-<div class="sectionbody">
<div class="admonitionblock important">
<table>
<tr>
@@ -343,8 +337,12 @@ the corresponding impact.
</tr>
</table>
</div>
-<div class="sect2">
-<h3 id="_jsf_messages">JSF Messages</h3>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_jsf_messages">JSF Messages</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>DeltaSpike provides an injectable component for typesafe FacesMessages.</p>
</div>
@@ -382,12 +380,14 @@ In case of a String we use it for both t
<p>If a Message is returned, we lookup the 'detail' and 'summary' categories (see <code>org.apache.deltaspike.core.api.message.Message#toString(String)</code> for creating the FacesMessage.</p>
</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="_multi_window_handling">Multi-Window Handling</h2>
+<div class="sectionbody">
<div class="sect2">
-<h3 id="_multi_window_handling">Multi-Window Handling</h3>
+<h3 id="_background">Background</h3>
<div class="sect3">
-<h4 id="_background">Background</h4>
-<div class="sect4">
-<h5 id="_historic_considerations">Historic Considerations</h5>
+<h4 id="_historic_considerations">Historic Considerations</h4>
<div class="paragraph">
<p>Until the end of the 1990s web browsers are usually single threaded and
only had one window. But in the last years browsers supporting multiple
@@ -398,8 +398,8 @@ maintaining web application data in @Ses
still used in most of the cases.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_how_jsf_2_changed_the_world">How JSF-2 Changed the World</h5>
+<div class="sect3">
+<h4 id="_how_jsf_2_changed_the_world">How JSF-2 Changed the World</h4>
<div class="paragraph">
<p>The MyFaces Orchestra community did a good summary about the various
ways to handle multiple window support in JSF Applications. Those
@@ -411,8 +411,8 @@ links, a typical JSF-2 application conta
used to see in JSF-1, thus we have far more href links to cope with.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_standard_windowid_handling">Standard windowId Handling</h5>
+<div class="sect3">
+<h4 id="_standard_windowid_handling">Standard windowId Handling</h4>
<div class="paragraph">
<p>With a classical approach we would not be able to simply add a windowId
parameter to such links because if the user would open the link in a new
@@ -430,10 +430,10 @@ not feasible as general solution.</p>
</div>
</div>
</div>
+<div class="sect2">
+<h3 id="_available_modes">Available Modes</h3>
<div class="sect3">
-<h4 id="_available_modes">Available Modes</h4>
-<div class="sect4">
-<h5 id="_clientwindow">CLIENTWINDOW</h5>
+<h4 id="_clientwindow">CLIENTWINDOW</h4>
<div class="paragraph">
<p>Each GET request results in an intermediate small html page which checks
if the browser tab fits the requested windowId. When the windowId is
@@ -443,8 +443,8 @@ dsRid/windowId will be added. On the ser
will be extracted from the cookie. For POST request detection, the
windowId will be added as hidden input to all forms.</p>
</div>
-<div class="sect5">
-<h6 id="_advantage">Advantage</h6>
+<div class="sect4">
+<h5 id="_advantage">Advantage</h5>
<div class="ulist">
<ul>
<li>
@@ -453,8 +453,8 @@ windowId will be added as hidden input t
</ul>
</div>
</div>
-<div class="sect5">
-<h6 id="_disadvantage">Disadvantage</h6>
+<div class="sect4">
+<h5 id="_disadvantage">Disadvantage</h5>
<div class="ulist">
<ul>
<li>
@@ -476,8 +476,8 @@ directly.</p>
</ul>
</div>
</div>
-<div class="sect5">
-<h6 id="_change_windowhandler_html">Change windowhandler.html</h6>
+<div class="sect4">
+<h5 id="_change_windowhandler_html">Change windowhandler.html</h5>
<div class="paragraph">
<p>To customize the look and feel of the windowhandler.html, you can simply
provide a own via:</p>
@@ -497,8 +497,8 @@ provide a own via:</p>
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_lazy">LAZY</h5>
+<div class="sect3">
+<h4 id="_lazy">LAZY</h4>
<div class="paragraph">
<p>Always appends the windowId to all, from JSF generated, URLs. On the
first GET request without a windowId, it will generate a new windowId
@@ -509,8 +509,8 @@ check if the windowId in the URL is matc
it is not matching, the view will be refreshed with the right windowId in
the URL.</p>
</div>
-<div class="sect5">
-<h6 id="_advantage_2">Advantage</h6>
+<div class="sect4">
+<h5 id="_advantage_2">Advantage</h5>
<div class="ulist">
<ul>
<li>
@@ -519,8 +519,8 @@ the URL.</p>
</ul>
</div>
</div>
-<div class="sect5">
-<h6 id="_disadvantage_2">Disadvantage</h6>
+<div class="sect4">
+<h5 id="_disadvantage_2">Disadvantage</h5>
<div class="ulist">
<ul>
<li>
@@ -532,8 +532,8 @@ the windowId matches the <code>window.na
</ul>
</div>
</div>
-<div class="sect5">
-<h6 id="_workflow_example">Workflow Example</h6>
+<div class="sect4">
+<h5 id="_workflow_example">Workflow Example</h5>
<div class="paragraph">
<p>First GET request with windowId</p>
</div>
@@ -599,8 +599,8 @@ from <code>window.name</code></p>
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_none">NONE</h5>
+<div class="sect3">
+<h4 id="_none">NONE</h4>
<div class="paragraph">
<p>Any window or browser tab detection will be disabled for the current
request. Scopes like @WindowScoped, @GroupedConversationScoped or
@@ -609,15 +609,15 @@ current request does not support Javascr
bot/crawler.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_delegated">DELEGATED</h5>
+<div class="sect3">
+<h4 id="_delegated">DELEGATED</h4>
<div class="paragraph">
<p>Delegates the complete window handling to the new JSF 2.2 ClientWindow
(if not disabled).</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_custom">CUSTOM</h5>
+<div class="sect3">
+<h4 id="_custom">CUSTOM</h4>
<div class="paragraph">
<p>Enables to use an complete own
<code>org.apache.deltaspike.jsf.spi.scope.window.ClientWindow</code>
@@ -625,10 +625,10 @@ implementation.</p>
</div>
</div>
</div>
+<div class="sect2">
+<h3 id="_configuration">Configuration</h3>
<div class="sect3">
-<h4 id="_configuration">Configuration</h4>
-<div class="sect4">
-<h5 id="_ds_windowid">ds:windowId</h5>
+<h4 id="_ds_windowid">ds:windowId</h4>
<div class="paragraph">
<p>The component <code>ds:windowId</code>
(<code>xmlns:ds="http://deltaspike.apache.org/jsf"</code>) is required to enable
@@ -638,8 +638,8 @@ mode. The best way, to apply it for all
to all of your templates.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_ds_disableclientwindow">ds:disableClientWindow</h5>
+<div class="sect3">
+<h4 id="_ds_disableclientwindow">ds:disableClientWindow</h4>
<div class="paragraph">
<p>Similiar to JSF 2.2' <code>disableClientWindow</code> attribute,
<code>ds:disableClientWindow</code> provides the ability to disable the rendering
@@ -654,8 +654,8 @@ of the windowId to all links of all chil
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_number_of_active_windows">Number of Active Windows</h5>
+<div class="sect3">
+<h4 id="_number_of_active_windows">Number of Active Windows</h4>
<div class="paragraph">
<p>By default, DeltaSpike allows <code>1024</code> active windows per session. Anyway, this number is reduced inside this JSF module to <code>64</code> for JSF applications. Once that the limit number of active windows is reached, DeltaSpike will drop the oldest active window.</p>
</div>
@@ -680,8 +680,8 @@ of the windowId to all links of all chil
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_switch_mode">Switch Mode</h5>
+<div class="sect3">
+<h4 id="_switch_mode">Switch Mode</h4>
<div class="paragraph">
<p>To switch the mode, just provide a
<code>org.apache.deltaspike.jsf.api.config.JsfModuleConfig</code> and overwrite
@@ -701,8 +701,8 @@ of the windowId to all links of all chil
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_provide_a_custom_clientwindow">Provide a Custom ClientWindow</h5>
+<div class="sect3">
+<h4 id="_provide_a_custom_clientwindow">Provide a Custom ClientWindow</h4>
<div class="paragraph">
<p>If you would like to provide an custom
<code>org.apache.deltaspike.jsf.spi.scope.window.ClientWindow</code>
@@ -736,8 +736,8 @@ implementation, you can just do it, for
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_based_scopes">Based Scopes</h4>
+<div class="sect2">
+<h3 id="_based_scopes">Based Scopes</h3>
<div class="ulist">
<ul>
<li>
@@ -753,10 +753,12 @@ implementation, you can just do it, for
</div>
</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="_scopes">Scopes</h2>
+<div class="sectionbody">
<div class="sect2">
-<h3 id="_scopes">Scopes</h3>
-<div class="sect3">
-<h4 id="__windowscoped">@WindowScoped</h4>
+<h3 id="__windowscoped">@WindowScoped</h3>
<div class="paragraph">
<p>The window-scope is like a session per window. That means that the data
is bound to a window/tab and it not shared between windows (like the
@@ -774,8 +776,8 @@ between windows.</p>
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="__viewaccessscoped">@ViewAccessScoped</h4>
+<div class="sect2">
+<h3 id="__viewaccessscoped">@ViewAccessScoped</h3>
<div class="paragraph">
<p>In case of conversations you have to un-scope beans manually (or they
will be terminated automatically after a timeout). However, sometimes
@@ -815,22 +817,22 @@ tab' on a page with a @ViewAccessScoped
</table>
</div>
</div>
-<div class="sect3">
-<h4 id="__groupedconversationscoped_from_deltaspike_0_6">@GroupedConversationScoped (From DeltaSpike 0.6)</h4>
+<div class="sect2">
+<h3 id="__groupedconversationscoped">@GroupedConversationScoped</h3>
<div class="paragraph">
<p>See (Grouped-)Conversations</p>
</div>
</div>
-<div class="sect3">
-<h4 id="__viewscoped">@ViewScoped</h4>
+<div class="sect2">
+<h3 id="__viewscoped">@ViewScoped</h3>
<div class="paragraph">
<p>DeltaSpike provides an CDI context for the JSF 2.0/2.1
@javax.faces.bean.ViewScoped. You can simply annotate your bean with
@javax.faces.bean.ViewScoped and @Named.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_jsf_2_0_scopes">JSF 2.0 Scopes</h4>
+<div class="sect2">
+<h3 id="_jsf_2_0_scopes">JSF 2.0 Scopes</h3>
<div class="paragraph">
<p>JSF 2.0 introduced new annotations as well as a new scope - the View
Scope. CODI allows to use all the CDI mechanisms in beans annotated
@@ -863,8 +865,10 @@ CDI annotation.</p>
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_integration_with_deltaspike_type_safe_messages">Integration with DeltaSpike Type-safe Messages</h3>
+</div>
+<div class="sect1">
+<h2 id="_integration_with_deltaspike_type_safe_messages">Integration with DeltaSpike Type-safe Messages</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>You can use <a href="core.html#_messages_i18n">DeltaSpike type-safe messages</a>
with JSF to provide i18n messages and test to an JSF appplicaton.</p>
@@ -933,10 +937,12 @@ javax.faces.component.UIInput.REQUIRED =
</div>
</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="_type_safe_view_configs">Type-safe View-Configs</h2>
+<div class="sectionbody">
<div class="sect2">
-<h3 id="_type_safe_view_configs">Type-safe View-Configs</h3>
-<div class="sect3">
-<h4 id="_intro">Intro</h4>
+<h3 id="_intro">Intro</h3>
<div class="paragraph">
<p>Type-safe view-configs are static configs which can be used in
combination with every view-technology which is based on Java. Currently
@@ -961,8 +967,8 @@ on the basic API provided by the Core. S
custom concepts the same way DeltaSpike itself does.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_motivation">Motivation</h4>
+<div class="sect2">
+<h3 id="_motivation">Motivation</h3>
<div class="paragraph">
<p>Instead of learning the concepts and rules of view-configs provided by
DeltaSpike, it might be easier for simple demos to just type some
@@ -1033,16 +1039,16 @@ more work <strong>initially</strong>?</p
<p>If you are still not convinced, you just have to try it. You will see how your daily workflow benefits from it pretty soon.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_bean_discovery_mode_annotated">Bean-discovery-mode Annotated</h4>
+<div class="sect2">
+<h3 id="_bean_discovery_mode_annotated">Bean-discovery-mode Annotated</h3>
<div class="paragraph">
<p>CDI 1.1 introduced a concept called bean-discovery-mode. If you would
like to use the mode <code>annotated</code>, please have a look at the tip at
@ViewConfigRoot</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_basic_api_usages">Basic API Usages</h4>
+<div class="sect2">
+<h3 id="_basic_api_usages">Basic API Usages</h3>
<div class="paragraph">
<p>While reading this section keep the following simple rules in mind:
Meta-data gets inherited along the path of Java inheritance
@@ -1181,8 +1187,8 @@ navigation target of this method is with
}</code></pre>
</div>
</div>
-<div class="sect4">
-<h5 id="_file_view_and_folder_folder_paths">File (@View) and Folder (@Folder) Paths</h5>
+<div class="sect3">
+<h4 id="_file_view_and_folder_folder_paths">File (@View) and Folder (@Folder) Paths</h4>
<div class="paragraph">
<p><code>@View</code> as well as <code>@Folder</code> are optional annotations. <code>@Folder</code> is only
needed for using a different folder-name or for marking folder configs
@@ -1247,8 +1253,8 @@ Pages.Wizard1.Step1).</p>
<code>@View#name</code> and <code>@View#extension</code> (or you register custom
`NameBuilder`s inline or globally).</p>
</div>
-<div class="sect5">
-<h6 id="__folder_name">@Folder#name</h6>
+<div class="sect4">
+<h5 id="__folder_name">@Folder#name</h5>
<div class="paragraph">
<p>The rules are pretty simple. You will get what you write. There are only
two additional features:</p>
@@ -1304,8 +1310,8 @@ two additional features:</p>
</ul>
</div>
</div>
-<div class="sect5">
-<h6 id="__view">@View</h6>
+<div class="sect4">
+<h5 id="__view">@View</h5>
<div class="paragraph">
<p>The same naming rules apply to <code>@View#basePath</code>. However, it is only
valid to be used at view-config nodes which represent pages (→ classes
@@ -1399,8 +1405,8 @@ inherited along the inheritance path.</p
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_navigation_parameters">Navigation Parameters</h5>
+<div class="sect3">
+<h4 id="_navigation_parameters">Navigation Parameters</h4>
<div class="paragraph">
<p>Since the view-config is static, an approach to add parameters is
needed. The following part shows different possibilities to add
@@ -1413,8 +1419,8 @@ using <code>@View(navigation = REDIRECT)
<code>"includeViewParams=true"</code> and <code>@View(viewParams = INCLUDE)</code>.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_static_configuration_via_navigationparameter">Static Configuration via @NavigationParameter</h5>
+<div class="sect3">
+<h4 id="_static_configuration_via_navigationparameter">Static Configuration via @NavigationParameter</h4>
<div class="paragraph">
<p>In some cases, it is needed to add an information in any case. So you can
annotate the view-config class with <code>@NavigationParameter</code>. Supported
@@ -1461,8 +1467,8 @@ them statically for particular methods:<
}</code></pre>
</div>
</div>
-<div class="sect5">
-<h6 id="_dynamic_configuration_via_navigationparametercontext">Dynamic Configuration via NavigationParameterContext</h6>
+<div class="sect4">
+<h5 id="_dynamic_configuration_via_navigationparametercontext">Dynamic Configuration via NavigationParameterContext</h5>
<div class="paragraph">
<p>Instead of using parameters in a static fashion (as shown above), it is
also possible to add them dynamically (e.g. in case of special
@@ -1494,8 +1500,8 @@ conditions).</p>
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_security_integration_via_secured">Security Integration via @Secured</h5>
+<div class="sect3">
+<h4 id="_security_integration_via_secured">Security Integration via @Secured</h4>
<div class="paragraph">
<p>This annotation is a custom view-meta-data provided by the
Security-module which allows to integrate third-party frameworks (or
@@ -1579,8 +1585,8 @@ this case you would need:</p>
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_view_controller_callbacks_via_viewcontrollerref">View-Controller Callbacks via @ViewControllerRef</h5>
+<div class="sect3">
+<h4 id="_view_controller_callbacks_via_viewcontrollerref">View-Controller Callbacks via @ViewControllerRef</h4>
<div class="paragraph">
<p>This annotation is a custom view-meta-data provided by the JSF-module
which allows to configure beans which should act as view-controllers.
@@ -1633,8 +1639,8 @@ display the exception.</p>
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_referencing_views_via_viewref">Referencing Views via @ViewRef</h5>
+<div class="sect3">
+<h4 id="_referencing_views_via_viewref">Referencing Views via @ViewRef</h4>
<div class="paragraph">
<p>With <code>@ViewControllerRef#value</code> you can annotate a view-config class to
bind (/reference) a controller to it. <code>@ViewRef#config</code> allows the same
@@ -1669,8 +1675,8 @@ many view/s.</p>
pages).</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_using_the_optional_viewnavigationhandler">Using the (Optional) ViewNavigationHandler</h5>
+<div class="sect3">
+<h4 id="_using_the_optional_viewnavigationhandler">Using the (Optional) ViewNavigationHandler</h4>
<div class="paragraph">
<p>With JSF you typically navigate with the action-method bound to a
command-component. However, also JSF supports manual navigation via
@@ -1706,8 +1712,8 @@ process, since <code>ViewNavigationHandl
navigation-handler (of JSF).</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_configuring_a_default_error_view">Configuring a Default Error-View</h5>
+<div class="sect3">
+<h4 id="_configuring_a_default_error_view">Configuring a Default Error-View</h4>
<div class="paragraph">
<p>It is possible to mark one view-config class as default error-view. That
means in case of errors it will be used as navigation target
@@ -1774,8 +1780,8 @@ in the JSF request-lifecycle for a navig
transformed to a standard (implicit) JSF navigation.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_using_viewconfigresolver">Using ViewConfigResolver</h5>
+<div class="sect3">
+<h4 id="_using_viewconfigresolver">Using ViewConfigResolver</h4>
<div class="paragraph">
<p>If you would like to query view-meta-data yourself (for whatever
reason), you can do that with <code>ViewConfigResolver</code>.</p>
@@ -1834,10 +1840,10 @@ configured (view-)meta-data and get and/
</div>
</div>
</div>
+<div class="sect2">
+<h3 id="_advanced_api_usages">Advanced API Usages</h3>
<div class="sect3">
-<h4 id="_advanced_api_usages">Advanced API Usages</h4>
-<div class="sect4">
-<h5 id="_creating_custom_meta_data_via_viewmetadata">Creating Custom Meta-Data via @ViewMetaData</h5>
+<h4 id="_creating_custom_meta_data_via_viewmetadata">Creating Custom Meta-Data via @ViewMetaData</h4>
<div class="paragraph">
<p>This meta-annotation allows to create custom view-meta-data which can be
used for view-configs. By default meta-data of a lower level overrides
@@ -1867,8 +1873,8 @@ ViewConfigDescriptor viewConfigDescripto
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_creating_custom_meta_data_via_stereotype">Creating Custom Meta-Data via @Stereotype</h5>
+<div class="sect3">
+<h4 id="_creating_custom_meta_data_via_stereotype">Creating Custom Meta-Data via @Stereotype</h4>
<div class="paragraph">
<p>Like with CDI itself you can encapsulate multiple view meta-data
annotation in one annotation.</p>
@@ -1898,8 +1904,8 @@ are by default transparent.</p>
well, once you annotate them with <code>@ViewMetaData</code>.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_creating_custom_callbacks_via_viewmetadata">Creating Custom Callbacks via @ViewMetaData</h5>
+<div class="sect3">
+<h4 id="_creating_custom_callbacks_via_viewmetadata">Creating Custom Callbacks via @ViewMetaData</h4>
<div class="paragraph">
<p>Via a custom ConfigPreProcessor it is possible to register custom
callbacks dynamically. The following listing shows a view-config which
@@ -1964,8 +1970,8 @@ the type of the callback (= class of the
parameter for <code>#getExecutableCallbackDescriptor</code>.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_creating_custom_inline_meta_data_via_inlineviewmetadata">Creating Custom inline Meta-Data via @InlineViewMetaData</h5>
+<div class="sect3">
+<h4 id="_creating_custom_inline_meta_data_via_inlineviewmetadata">Creating Custom inline Meta-Data via @InlineViewMetaData</h4>
<div class="paragraph">
<p>This annotation can be used for view-meta-data which can be placed on
other classes than view-config-classes. It is used, for example, for <code>@ViewRef</code>.
@@ -1978,8 +1984,8 @@ meta-data representation which is used f
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_path_validation">Path-Validation</h4>
+<div class="sect2">
+<h3 id="_path_validation">Path-Validation</h3>
<div class="paragraph">
<p>DeltaSpike (after v0.5) validates your configs out-of-the-box. The
application will fail to start, if there is an invalid config (e.g. a
@@ -1994,10 +2000,10 @@ which restricts
<code>org.apache.deltaspike.jsf.impl.config.view.ViewConfigPathValidator</code>.</p>
</div>
</div>
+<div class="sect2">
+<h3 id="_view_config_spi">View-Config SPI</h3>
<div class="sect3">
-<h4 id="_view_config_spi">View-Config SPI</h4>
-<div class="sect4">
-<h5 id="_configdescriptorvalidator">ConfigDescriptorValidator</h5>
+<h4 id="_configdescriptorvalidator">ConfigDescriptorValidator</h4>
<div class="paragraph">
<p>Allows to validate the final view-config descriptors before they get
deployed. Since the config-descriptor contains, for example, the final path, it is
@@ -2005,22 +2011,22 @@ also possible to validate if the corresp
<code>@ViewConfigRoot</code> to configure 1-n validators.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_confignodeconverter">ConfigNodeConverter</h5>
+<div class="sect3">
+<h4 id="_confignodeconverter">ConfigNodeConverter</h4>
<div class="paragraph">
<p>Allows to provide custom strategies to process the nodes of the built
config-tree. Use <code>@ViewConfigRoot</code> to configure a custom converter.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_configpreprocessor">ConfigPreProcessor</h5>
+<div class="sect3">
+<h4 id="_configpreprocessor">ConfigPreProcessor</h4>
<div class="paragraph">
<p>Allows to change the found meta-data (e.g. replace default values,
callbacks,…​) or the <code>ViewConfigNode</code> itself.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_inlinemetadatatransformer">InlineMetaDataTransformer</h5>
+<div class="sect3">
+<h4 id="_inlinemetadatatransformer">InlineMetaDataTransformer</h4>
<div class="paragraph">
<p>Allows to transform an annotation annotated with <code>@InlineViewMetaData</code>
to an annotation annotated with <code>@ViewMetaData</code>. This transformer is
@@ -2030,15 +2036,15 @@ the inline-meta-data needs a different s
<code>@ViewControllerRef</code>.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_targetviewconfigprovider">TargetViewConfigProvider</h5>
+<div class="sect3">
+<h4 id="_targetviewconfigprovider">TargetViewConfigProvider</h4>
<div class="paragraph">
<p>Allows to provide a custom reference to <code>ViewConfig</code> classes (see for example
<code>@InlineViewMetaData</code> and <code>@ViewRef</code>)</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_viewconfiginheritancestrategy">ViewConfigInheritanceStrategy</h5>
+<div class="sect3">
+<h4 id="_viewconfiginheritancestrategy">ViewConfigInheritanceStrategy</h4>
<div class="paragraph">
<p>Allows to customize the inheritance-strategy for meta-data. For example,
inheritance via standard java inheritance vs. inheritance via nested
@@ -2046,15 +2052,15 @@ interfaces. Use <code>@ViewConfigRoot</c
inheritance-strategy.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="_viewconfignode">ViewConfigNode</h5>
+<div class="sect3">
+<h4 id="_viewconfignode">ViewConfigNode</h4>
<div class="paragraph">
<p>Node-type used for building the meta-data-tree during the bootstrapping
process.</p>
</div>
</div>
-<div class="sect4">
-<h5 id="__viewconfigroot">@ViewConfigRoot</h5>
+<div class="sect3">
+<h4 id="__viewconfigroot">@ViewConfigRoot</h4>
<div class="paragraph">
<p>Optional annotation which allows to provide custom implementations. Only
annotate one <code>ViewConfig</code> class which represents the root node.</p>
@@ -2079,8 +2085,8 @@ example:</p>
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_activation_of_custom_naming_conventions">Activation of Custom Naming Conventions</h4>
+<div class="sect2">
+<h3 id="_activation_of_custom_naming_conventions">Activation of Custom Naming Conventions</h3>
<div class="paragraph">
<p>DeltaSpike allows to customize the default naming convention via
<code>View.DefaultBasePathBuilder</code> and/or <code>View.DefaultFileNameBuilder</code>
@@ -2093,11 +2099,10 @@ is possible via <code>Folder.folderNameB
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="__grouped_conversations">(Grouped-)Conversations</h3>
-<div class="paragraph">
-<p>Available from DeltaSpike 0.6.</p>
</div>
+<div class="sect1">
+<h2 id="__grouped_conversations">(Grouped-)Conversations</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>DeltaSpike conversations are based on the window-scope. Therefore, do not
forget to add the <code>ds:windowId</code>
@@ -2254,8 +2259,8 @@ producer methods).</p>
}</code></pre>
</div>
</div>
-<div class="sect3">
-<h4 id="_terminating_conversations">Terminating Conversations</h4>
+<div class="sect2">
+<h3 id="_terminating_conversations">Terminating Conversations</h3>
<div class="paragraph">
<p>You can inject the conversation via <code>@Inject</code> and use it to terminate
the conversation immediately or you inject the
@@ -2384,8 +2389,8 @@ you can close them in a <code>@PostRende
</table>
</div>
</div>
-<div class="sect3">
-<h4 id="_sub_conversation_groups">Sub-Conversation-Groups</h4>
+<div class="sect2">
+<h3 id="_sub_conversation_groups">Sub-Conversation-Groups</h3>
<div class="paragraph">
<p>Due to the parallel conversation concept of DeltaSpike there is no need
of something like nested conversations. Just use them in parallel and
@@ -2470,10 +2475,12 @@ be closed as soon as you close the Impli
</div>
</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="_injection_in_jsf_artifacts">Injection in JSF Artifacts</h2>
+<div class="sectionbody">
<div class="sect2">
-<h3 id="_injection_in_jsf_artifacts">Injection in JSF Artifacts</h3>
-<div class="sect3">
-<h4 id="_converter_and_validator">Converter and Validator</h4>
+<h3 id="_converter_and_validator">Converter and Validator</h3>
<div class="paragraph">
<p>Per default the JSF module of DeltaSpike handles JSF converters and validators as std. CDI beans and
therefore it’s possible to use injection, lifecycle-callbacks, scope-annotations,…​
@@ -2481,8 +2488,8 @@ the same way as with any other CDI bean.
The usage is the same as for <code>PhaseListener</code> s.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_phaselistener">PhaseListener</h4>
+<div class="sect2">
+<h3 id="_phaselistener">PhaseListener</h3>
<div class="paragraph">
<p>Once a std. JSF-<code>PhaseListener</code> is annotated with <code>@org.apache.deltaspike.jsf.api.listener.phase.JsfPhaseListener</code>,
that <code>PhaseListener</code> gets active without additional config in <code>faces-config.xml</code>.
@@ -2523,10 +2530,12 @@ DeltaSpike itself uses it internally e.g
</div>
</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="_event_broadcasting">Event broadcasting</h2>
+<div class="sectionbody">
<div class="sect2">
-<h3 id="_event_broadcasting">Event broadcasting</h3>
-<div class="sect3">
-<h4 id="_observe_faces_requests">Observe Faces-Requests</h4>
+<h3 id="_observe_faces_requests">Observe Faces-Requests</h3>
<div class="paragraph">
<p>It is possible to observe JSF-Requests via <code>@Observes</code> in combination with
<code>@org.apache.deltaspike.core.api.lifecycle.Initialized</code> or
@@ -2548,8 +2557,8 @@ DeltaSpike itself uses it internally e.g
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_beforephase_afterphase">BeforePhase / AfterPhase</h4>
+<div class="sect2">
+<h3 id="_beforephase_afterphase">BeforePhase / AfterPhase</h3>
<div class="paragraph">
<p>It is possible to observe JSF request-lifecycle phase-events via <code>@Observes</code> in combination with
<code>@org.apache.deltaspike.jsf.api.listener.phase.BeforePhase</code> or
@@ -2571,8 +2580,8 @@ DeltaSpike itself uses it internally e.g
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_jsf_systemevents">JSF SystemEvents</h4>
+<div class="sect2">
+<h3 id="_jsf_systemevents">JSF SystemEvents</h3>
<div class="paragraph">
<p>Following JSF SystemEvents can be observed via CDI:</p>
</div>
@@ -2604,17 +2613,19 @@ DeltaSpike itself uses it internally e.g
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_intergration_with_exception_control_from_deltaspike_0_6">Intergration with Exception Control (from DeltaSpike 0.6)</h3>
+</div>
+<div class="sect1">
+<h2 id="_integration_with_exception_control">Integration with Exception Control</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>Whenever a unhandled exception occurs within the JSF lifecycle, our JSF
ExceptionHandler provides a integration to the DeltaSpike Exception
Control.</p>
</div>
+<div class="sect2">
+<h3 id="_examples">Examples</h3>
<div class="sect3">
-<h4 id="_examples">Examples</h4>
-<div class="sect4">
-<h5 id="_basic">Basic</h5>
+<h4 id="_basic">Basic</h4>
<div class="listingblock">
<div class="content">
<pre>@ExceptionHandler
@@ -2631,8 +2642,8 @@ public class ApplicationExceptionHandler
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_redirect">Redirect</h5>
+<div class="sect3">
+<h4 id="_redirect">Redirect</h4>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ExceptionHandler</span>
@@ -2653,8 +2664,8 @@ public class ApplicationExceptionHandler
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_using_a_custom_qualifier_for_jsf_exceptions">Using a Custom Qualifier for JSF Exceptions</h4>
+<div class="sect2">
+<h3 id="_using_a_custom_qualifier_for_jsf_exceptions">Using a Custom Qualifier for JSF Exceptions</h3>
<div class="paragraph">
<p>In some cases, it is required to differentiate exceptions from JSF and
normal exceptions. This is possible via a CDI qualifier:</p>
@@ -2696,8 +2707,10 @@ normal exceptions. This is possible via
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_double_submit_prevention">Double-Submit Prevention</h3>
+</div>
+<div class="sect1">
+<h2 id="_double_submit_prevention">Double-Submit Prevention</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>To avoid that the same content of a form gets submitted and therefore
processed multiple times, it is possible to use the tag
@@ -2723,8 +2736,10 @@ within every JSF form-tag, you would lik
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_tips">Tips</h3>
+</div>
+<div class="sect1">
+<h2 id="_tips">Tips</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>Using errorView, DefaultErrorView or ViewNavigationHandler will fail
with Weld versions older than 1.1.10 due to
@@ -2732,7 +2747,6 @@ with Weld versions older than 1.1.10 due
</div>
</div>
</div>
-</div>
</div>
</div>
@@ -2767,34 +2781,44 @@ with Weld versions older than 1.1.10 due
<div class="fallback-toc">
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a>
+<li><a href="#_project_setup">Project Setup</a>
<ul class="sectlevel2">
<li><a href="#_declare_jsf_module_dependencies">Declare JSF Module Dependencies</a></li>
</ul>
</li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
-<ul class="sectlevel2">
<li><a href="#_jsf_messages">JSF Messages</a></li>
<li><a href="#_multi_window_handling">Multi-Window Handling</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_background">Background</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
<li><a href="#_historic_considerations">Historic Considerations</a></li>
<li><a href="#_how_jsf_2_changed_the_world">How JSF-2 Changed the World</a></li>
<li><a href="#_standard_windowid_handling">Standard windowId Handling</a></li>
</ul>
</li>
<li><a href="#_available_modes">Available Modes</a>
+<ul class="sectlevel3">
+<li><a href="#_clientwindow">CLIENTWINDOW</a>
+<ul class="sectlevel4">
+<li><a href="#_advantage">Advantage</a></li>
+<li><a href="#_disadvantage">Disadvantage</a></li>
+<li><a href="#_change_windowhandler_html">Change windowhandler.html</a></li>
+</ul>
+</li>
+<li><a href="#_lazy">LAZY</a>
<ul class="sectlevel4">
-<li><a href="#_clientwindow">CLIENTWINDOW</a></li>
-<li><a href="#_lazy">LAZY</a></li>
+<li><a href="#_advantage_2">Advantage</a></li>
+<li><a href="#_disadvantage_2">Disadvantage</a></li>
+<li><a href="#_workflow_example">Workflow Example</a></li>
+</ul>
+</li>
<li><a href="#_none">NONE</a></li>
<li><a href="#_delegated">DELEGATED</a></li>
<li><a href="#_custom">CUSTOM</a></li>
</ul>
</li>
<li><a href="#_configuration">Configuration</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
<li><a href="#_ds_windowid">ds:windowId</a></li>
<li><a href="#_ds_disableclientwindow">ds:disableClientWindow</a></li>
<li><a href="#_number_of_active_windows">Number of Active Windows</a></li>
@@ -2806,25 +2830,34 @@ with Weld versions older than 1.1.10 due
</ul>
</li>
<li><a href="#_scopes">Scopes</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#__windowscoped">@WindowScoped</a></li>
<li><a href="#__viewaccessscoped">@ViewAccessScoped</a></li>
-<li><a href="#__groupedconversationscoped_from_deltaspike_0_6">@GroupedConversationScoped (From DeltaSpike 0.6)</a></li>
+<li><a href="#__groupedconversationscoped">@GroupedConversationScoped</a></li>
<li><a href="#__viewscoped">@ViewScoped</a></li>
<li><a href="#_jsf_2_0_scopes">JSF 2.0 Scopes</a></li>
</ul>
</li>
<li><a href="#_integration_with_deltaspike_type_safe_messages">Integration with DeltaSpike Type-safe Messages</a></li>
<li><a href="#_type_safe_view_configs">Type-safe View-Configs</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_intro">Intro</a></li>
<li><a href="#_motivation">Motivation</a></li>
<li><a href="#_bean_discovery_mode_annotated">Bean-discovery-mode Annotated</a></li>
<li><a href="#_basic_api_usages">Basic API Usages</a>
+<ul class="sectlevel3">
+<li><a href="#_file_view_and_folder_folder_paths">File (@View) and Folder (@Folder) Paths</a>
<ul class="sectlevel4">
-<li><a href="#_file_view_and_folder_folder_paths">File (@View) and Folder (@Folder) Paths</a></li>
+<li><a href="#__folder_name">@Folder#name</a></li>
+<li><a href="#__view">@View</a></li>
+</ul>
+</li>
<li><a href="#_navigation_parameters">Navigation Parameters</a></li>
-<li><a href="#_static_configuration_via_navigationparameter">Static Configuration via @NavigationParameter</a></li>
+<li><a href="#_static_configuration_via_navigationparameter">Static Configuration via @NavigationParameter</a>
+<ul class="sectlevel4">
+<li><a href="#_dynamic_configuration_via_navigationparametercontext">Dynamic Configuration via NavigationParameterContext</a></li>
+</ul>
+</li>
<li><a href="#_security_integration_via_secured">Security Integration via @Secured</a></li>
<li><a href="#_view_controller_callbacks_via_viewcontrollerref">View-Controller Callbacks via @ViewControllerRef</a></li>
<li><a href="#_referencing_views_via_viewref">Referencing Views via @ViewRef</a></li>
@@ -2834,7 +2867,7 @@ with Weld versions older than 1.1.10 due
</ul>
</li>
<li><a href="#_advanced_api_usages">Advanced API Usages</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
<li><a href="#_creating_custom_meta_data_via_viewmetadata">Creating Custom Meta-Data via @ViewMetaData</a></li>
<li><a href="#_creating_custom_meta_data_via_stereotype">Creating Custom Meta-Data via @Stereotype</a></li>
<li><a href="#_creating_custom_callbacks_via_viewmetadata">Creating Custom Callbacks via @ViewMetaData</a></li>
@@ -2843,7 +2876,7 @@ with Weld versions older than 1.1.10 due
</li>
<li><a href="#_path_validation">Path-Validation</a></li>
<li><a href="#_view_config_spi">View-Config SPI</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
<li><a href="#_configdescriptorvalidator">ConfigDescriptorValidator</a></li>
<li><a href="#_confignodeconverter">ConfigNodeConverter</a></li>
<li><a href="#_configpreprocessor">ConfigPreProcessor</a></li>
@@ -2858,28 +2891,28 @@ with Weld versions older than 1.1.10 due
</ul>
</li>
<li><a href="#__grouped_conversations">(Grouped-)Conversations</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_terminating_conversations">Terminating Conversations</a></li>
<li><a href="#_sub_conversation_groups">Sub-Conversation-Groups</a></li>
</ul>
</li>
<li><a href="#_injection_in_jsf_artifacts">Injection in JSF Artifacts</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_converter_and_validator">Converter and Validator</a></li>
<li><a href="#_phaselistener">PhaseListener</a></li>
</ul>
</li>
<li><a href="#_event_broadcasting">Event broadcasting</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_observe_faces_requests">Observe Faces-Requests</a></li>
<li><a href="#_beforephase_afterphase">BeforePhase / AfterPhase</a></li>
<li><a href="#_jsf_systemevents">JSF SystemEvents</a></li>
</ul>
</li>
-<li><a href="#_intergration_with_exception_control_from_deltaspike_0_6">Intergration with Exception Control (from DeltaSpike 0.6)</a>
-<ul class="sectlevel3">
+<li><a href="#_integration_with_exception_control">Integration with Exception Control</a>
+<ul class="sectlevel2">
<li><a href="#_examples">Examples</a>
-<ul class="sectlevel4">
+<ul class="sectlevel3">
<li><a href="#_basic">Basic</a></li>
<li><a href="#_redirect">Redirect</a></li>
</ul>
@@ -2890,8 +2923,6 @@ with Weld versions older than 1.1.10 due
<li><a href="#_double_submit_prevention">Double-Submit Prevention</a></li>
<li><a href="#_tips">Tips</a></li>
</ul>
-</li>
-</ul>
</div>
</div>
Modified: deltaspike/site/trunk/content/staging/documentation/partial-bean.html
URL: http://svn.apache.org/viewvc/deltaspike/site/trunk/content/staging/documentation/partial-bean.html?rev=1682851&r1=1682850&r2=1682851&view=diff
==============================================================================
--- deltaspike/site/trunk/content/staging/documentation/partial-bean.html (original)
+++ deltaspike/site/trunk/content/staging/documentation/partial-bean.html Mon Jun 1 09:41:35 2015
@@ -281,7 +281,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_project_setup">Project Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The configuration information provided here is for Maven-based projects and it assumes that you have already declared the DeltaSpike version and DeltaSpike Core module for your projects, as detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a>. For Maven-independent projects, see <a href="configure.html#config-maven-indep">Configure DeltaSpike in Maven-independent Projects</a>.</p>
@@ -308,12 +308,6 @@ table.CodeRay td.code>pre{padding:0}
<span class="tag"></dependency></span></code></pre>
</div>
</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
-<div class="sectionbody">
<div class="admonitionblock important">
<table>
<tr>
@@ -326,8 +320,12 @@ Currently CDI Interceptors applied via @
</tr>
</table>
</div>
-<div class="sect2">
-<h3 id="__partialbeanbinding">@PartialBeanBinding</h3>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="__partialbeanbinding">@PartialBeanBinding</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>Partial beans allow you to implement a generic handler to replace manual
implementations of interfaces (or abstract classes).</p>
@@ -369,7 +367,6 @@ interface (/abstract class) to generic h
</div>
</div>
</div>
-</div>
</div>
</div>
@@ -395,17 +392,13 @@ interface (/abstract class) to generic h
<div class="fallback-toc">
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a>
+<li><a href="#_project_setup">Project Setup</a>
<ul class="sectlevel2">
<li><a href="#_declare_partial_bean_module_dependencies">Declare Partial-Bean Module Dependencies</a></li>
</ul>
</li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
-<ul class="sectlevel2">
<li><a href="#__partialbeanbinding">@PartialBeanBinding</a></li>
</ul>
-</li>
-</ul>
</div>
</div>
Modified: deltaspike/site/trunk/content/staging/documentation/scheduler.html
URL: http://svn.apache.org/viewvc/deltaspike/site/trunk/content/staging/documentation/scheduler.html?rev=1682851&r1=1682850&r2=1682851&view=diff
==============================================================================
--- deltaspike/site/trunk/content/staging/documentation/scheduler.html (original)
+++ deltaspike/site/trunk/content/staging/documentation/scheduler.html Mon Jun 1 09:41:35 2015
@@ -281,7 +281,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_project_setup">Project Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The configuration information provided here is for Maven-based projects and it assumes that you have already declared the DeltaSpike version and DeltaSpike Core module for your projects, as detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a>. For Maven-independent projects, see <a href="configure.html#config-maven-indep">Configure DeltaSpike in Maven-independent Projects</a>.</p>
@@ -350,10 +350,8 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
+<h2 id="__scheduled">@Scheduled</h2>
<div class="sectionbody">
-<div class="sect2">
-<h3 id="__scheduled">@Scheduled</h3>
<div class="paragraph">
<p>Just annotate your Quartz-Jobs with <code>@Scheduled</code> and they will get
picked up and passed to the scheduler automatically (during the
@@ -424,8 +422,10 @@ schedule/install jobs dynamically.</p>
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_manual_scheduler_control">Manual Scheduler Control</h3>
+</div>
+<div class="sect1">
+<h2 id="_manual_scheduler_control">Manual Scheduler Control</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>Th SPI allows to control the scheduler (or integrate any other
compatible scheduler as an alternative to Quartz2)</p>
@@ -471,15 +471,16 @@ start a job once (without registering it
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_custom_scheduler">Custom Scheduler</h3>
+</div>
+<div class="sect1">
+<h2 id="_custom_scheduler">Custom Scheduler</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>It is possible to replace the default integration with Quartz. Any scheduler that supports cron-expressions for job-classes can be used.
For more information, see <a href="https://deltaspike.apache.org/javadoc/1.3.0/org/apache/deltaspike/scheduler/spi/Scheduler.html">Scheduler javadoc</a>.</p>
</div>
</div>
</div>
-</div>
</div>
</div>
@@ -512,21 +513,17 @@ For more information, see <a href="https
<div class="fallback-toc">
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a>
+<li><a href="#_project_setup">Project Setup</a>
<ul class="sectlevel2">
<li><a href="#_1_declare_scheduler_module_dependencies">1. Declare Scheduler Module Dependencies</a></li>
<li><a href="#_2_declare_external_dependencies">2. Declare External Dependencies</a></li>
<li><a href="#_3_declare_container_control_dependency">3. Declare Container Control dependency</a></li>
</ul>
</li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
-<ul class="sectlevel2">
<li><a href="#__scheduled">@Scheduled</a></li>
<li><a href="#_manual_scheduler_control">Manual Scheduler Control</a></li>
<li><a href="#_custom_scheduler">Custom Scheduler</a></li>
</ul>
-</li>
-</ul>
</div>
</div>
Modified: deltaspike/site/trunk/content/staging/documentation/security.html
URL: http://svn.apache.org/viewvc/deltaspike/site/trunk/content/staging/documentation/security.html?rev=1682851&r1=1682850&r2=1682851&view=diff
==============================================================================
--- deltaspike/site/trunk/content/staging/documentation/security.html (original)
+++ deltaspike/site/trunk/content/staging/documentation/security.html Mon Jun 1 09:41:35 2015
@@ -276,12 +276,27 @@ table.CodeRay td.code>pre{padding:0}
<h2 id="_overview">Overview</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>The Security module provides intercept and security checking on method calls. This module also enables integration of third-party security frameworks and custom security concepts.</p>
+<p>The Security module provides APIs for authorization of method invocations.</p>
+</div>
+<div class="paragraph">
+<p>There are two different APIs provided for two different approaches — one simple interceptor-style API and another for more complex scenarios.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong><a href="#_simple_interceptor_style_authorization">Simple interceptor-style API</a>:</strong> the method that is to be secured is loosely coupled to a predicate method
+(called <em>authorizer</em> method) which decides whether the secured method invocation should proceed. Similarly to CDI
+interceptors, the secured method and the authorizer are tied together using a binding annotation — <code>@SecurityBindingType</code> in this case.</p>
+</li>
+<li>
+<p><strong><a href="#_advanced_authorization">Advanced API</a>:</strong> this API offers fine-grained control over the authorization process. Multiple independent <em>voters</em> can participate in making the authorization decision and possibly return <em>security violations</em> and thus prevent the method invocation. The voters share a common context. This API is suitable for integration with third-party security frameworks. Also, this API can be used to <a href="jsf.html#_security_integration_via_secured">secure JSF view access</a> when using the DeltaSpike JSF module.</p>
+</li>
+</ul>
</div>
</div>
</div>
<div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_project_setup">Project Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The configuration information provided here is for Maven-based projects and it assumes that you have already declared the DeltaSpike version and DeltaSpike Core module for your projects, as detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a>. For Maven-independent projects, see <a href="configure.html#config-maven-indep">Configure DeltaSpike in Maven-independent Projects</a>.</p>
@@ -310,7 +325,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect2">
-<h3 id="_2_enable_the_security_interceptor">2. Enable the Security Interceptor</h3>
+<h3 id="_2_enable_the_securityinterceptor">2. Enable the SecurityInterceptor</h3>
<div class="paragraph">
<p>For CDI 1.0 (or DeltaSpike v1.1.0 and earlier together with CDI 1.1+), you must enable the security interceptor in the project <code>beans.xml</code> file:</p>
</div>
@@ -328,51 +343,44 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
+<h2 id="_simple_interceptor_style_authorization">Simple interceptor-style authorization</h2>
<div class="sectionbody">
-<div class="sect2">
-<h3 id="_securitybinding_for_class_and_method_invocations">SecurityBinding for Class and Method Invocations</h3>
<div class="paragraph">
<p>This feature of the Security module intercepts method calls and performs a security check before invocation is allowed to proceed.</p>
</div>
<div class="paragraph">
-<p>In order to use the DeltaSpike security module, you must first have
-installed the proper dependencies into the <code>pom.xml</code> file. Once this is
-complete, you may proceed to create a security parameter binding
-annotation. This is what we will use to add security behavior to our
-business classes and methods.</p>
+<p>The first piece of code required to use this API is a <em>security binding</em> annotation. This is what we will use to add security behavior to our business classes and methods.</p>
</div>
<div class="listingblock">
-<div class="title">Create the SecurityBinding</div>
+<div class="title">Create the security binding annotation</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Retention</span>(value = RUNTIME)
<span class="annotation">@Target</span>({TYPE, METHOD})
<span class="annotation">@Documented</span>
<span class="annotation">@SecurityBindingType</span>
-<span class="directive">public</span> <span class="annotation">@interface</span> CustomSecurityBinding {
-}</code></pre>
+<span class="directive">public</span> <span class="annotation">@interface</span> UserLoggedIn {}</code></pre>
</div>
</div>
<div class="paragraph">
-<p>Next, we must define an Authorizer class to implement behavior for our
-custom SecurityBindingType. This class is simply a CDI bean which
-declares a @Secures method, qualified with the security binding
+<p>Next, we must define an <em>authorizer</em> class to implement behavior for our
+custom security binding type. This class is simply a CDI bean which
+declares a method annotated <code>@Secures</code>, qualified with the security binding
annotation we created in the first step.</p>
</div>
<div class="paragraph">
-<p>This method has access to the InvocationContext of the method call, so
+<p>This method has access to the <code>InvocationContext</code> of the method call, so
if we need to access parameter arguments, we can do so using the given
context. Note that we may also inject other beans into the parameter
-list of our @Secures method.</p>
+list of our authorizer method.</p>
</div>
<div class="listingblock">
-<div class="title">Create the Authorizer</div>
+<div class="title">Create the authorizer</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
-<span class="directive">public</span> <span class="type">class</span> <span class="class">CustomAuthorizer</span>
+<span class="directive">public</span> <span class="type">class</span> <span class="class">LoggedInAuthorizer</span>
{
<span class="annotation">@Secures</span>
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> <span class="type">boolean</span> doSecuredCheck(InvocationContext invocationContext, BeanManager manager, <span class="predefined-type">Identity</span> identity) <span class="directive">throws</span> <span class="exception">Exception</span>
{
<span class="keyword">return</span> identity.isLoggedIn(); <span class="comment">// perform security check</span>
@@ -383,15 +391,15 @@ list of our @Secures method.</p>
<div class="paragraph">
<p>We can then use our new annotation to secure business or bean methods.
This binding annotation may be placed on the entire class (securing all
-methods,) or on individual methods that you wish to secure.</p>
+methods) or on individual methods that you wish to secure.</p>
</div>
<div class="listingblock">
-<div class="title">Secure a Bean Method</div>
+<div class="title">Secure a bean method</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
<span class="directive">public</span> <span class="type">class</span> <span class="class">SecuredBean1</span>
{
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> <span class="type">void</span> doSomething(Thing thing)
{
thing.doSomething();
@@ -401,11 +409,11 @@ methods,) or on individual methods that
</div>
<div class="paragraph">
<p>Next, we may access parameter values from the method invocation directly
-in our authorizer bean by creating custom @SecurityParameterBinding
+in our authorizer bean by creating custom <code>@SecurityParameterBinding</code>
types; this is a simple step once we have completed the work above:</p>
</div>
<div class="listingblock">
-<div class="title">Create a Parameter Binding Annotation</div>
+<div class="title">Create a parameter binding annotation</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Retention</span>(value = RUNTIME)
<span class="annotation">@Target</span>({PARAMETER})
@@ -421,13 +429,13 @@ values as arguments into our authorizer
security in our applications:</p>
</div>
<div class="listingblock">
-<div class="title">Update the Authorizer to use Parameter Binding</div>
+<div class="title">Update the authorizer to use parameter binding</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
<span class="directive">public</span> <span class="type">class</span> <span class="class">CustomAuthorizer</span>
{
<span class="annotation">@Secures</span>
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> <span class="type">boolean</span> doSecuredCheck(InvocationContext invocationContext, BeanManager manager, <span class="predefined-type">Identity</span> identity, <span class="annotation">@CurrentThing</span> Thing thing) <span class="directive">throws</span> <span class="exception">Exception</span>
{
<span class="keyword">return</span> thing.hasMember(identity); <span class="comment">// perform security check against our method parameter</span>
@@ -444,7 +452,7 @@ security in our applications:</p>
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
<span class="directive">public</span> <span class="type">class</span> <span class="class">SecuredBean1</span>
{
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> <span class="type">void</span> doSomething(<span class="annotation">@CurrentThing</span> Thing thing)
{
thing.doSomething();
@@ -467,7 +475,7 @@ case:</p>
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
<span class="directive">public</span> <span class="type">class</span> <span class="class">SecuredBean1</span>
{
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> Thing loadSomething()
{
<span class="keyword">return</span> thingLoader.load();
@@ -477,7 +485,7 @@ case:</p>
</div>
<div class="paragraph">
<p>Now you need to access the return value in the authorizer method. You
-can inject it using the @SecuredReturn annotation. Update the Authorizer
+can inject it using the <code>@SecuredReturn</code> annotation. Update the authorizer
to use a secured return value:</p>
</div>
<div class="listingblock">
@@ -486,7 +494,7 @@ to use a secured return value:</p>
<span class="directive">public</span> <span class="type">class</span> <span class="class">CustomAuthorizer</span>
{
<span class="annotation">@Secures</span>
- <span class="annotation">@CustomSecurityBinding</span>
+ <span class="annotation">@UserLoggedIn</span>
<span class="directive">public</span> <span class="type">boolean</span> doSecuredCheck(<span class="annotation">@SecuredReturn</span> Thing thing, <span class="predefined-type">Identity</span> identity) <span class="directive">throws</span> <span class="exception">Exception</span>
{
<span class="keyword">return</span> thing.hasMember(identity); <span class="comment">// perform security check against the return value</span>
@@ -497,38 +505,13 @@ to use a secured return value:</p>
<p>Now the authorization will take place after the method invocation using
the return value of the business method.</p>
</div>
-<div class="listingblock">
-<div class="title">Complete the Parameter Binding</div>
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@ApplicationScoped</span>
-<span class="directive">public</span> <span class="type">class</span> <span class="class">SecuredBean1</span>
-{
- <span class="annotation">@CustomSecurityBinding</span>
- <span class="directive">public</span> <span class="type">void</span> doSomething(<span class="annotation">@CurrentThing</span> Thing thing)
- {
- thing.doSomething();
- }
-}</code></pre>
-</div>
</div>
-<div class="paragraph">
-<p>Our method is now secured, and we are able to use given parameter values
-as part of our security authorizer!</p>
</div>
-</div>
-<div class="sect2">
-<h3 id="_integrating_third_party_security_frameworks">Integrating Third-party Security Frameworks</h3>
-<div class="sect3">
-<h4 id="__secured">@Secured</h4>
+<div class="sect1">
+<h2 id="_advanced_authorization">Advanced authorization</h2>
+<div class="sectionbody">
<div class="paragraph">
-<p><code>@Secured</code> is build on <code>@SecurityBindingType</code> and a very simple
-alternative to the rest of the security module. It is a basic hook to
-integrate a custom security concept, third-party frameworks, etc. It
-does not provide a full blown security concept like the rest of the
-security module, but other DeltaSpike modules ensure that the security
-concepts are integrated properly (e.g. correct behaviour within custom
-scope implementations,…​). It just allows to integrate other security
-frameworks easily.</p>
+<p>This is an alternative to the simple annotation-based interceptor-style API. This API uses the annotation <code>@Secured</code> and is mainly a hook for integration of custom security concepts and third-party frameworks. The DeltaSpike Security module is <em>not</em> a full application security solution, but some of the other DeltaSpike modules are security-enabled and use this API (e.g. correct behaviour within custom scope implementations,…​). Internally, this <code>@Secured</code> API uses the <code>@Secures</code>/<code>@SecurityBindingType</code> API.</p>
</div>
<div class="paragraph">
<p>(In MyFaces CODI it was originally a CDI interceptor. This part changed
@@ -537,6 +520,9 @@ a bit, because between the interceptor a
approach. Therefore the basic behaviour remains the same and you can
think about it like an interceptor.)</p>
</div>
+<div class="paragraph">
+<p>The entry point to this API is the <code>@Secured</code> annotation placed either on the whole class — enabling security for all methods — or on individual methods. The only other prerequisite is at least one <code>AccessDecisionVoter</code> implementation, explained in the next section.</p>
+</div>
<div class="listingblock">
<div class="title">Securing All Intercepted Methods of a CDI Bean</div>
<div class="content">
@@ -562,11 +548,10 @@ think about it like an interceptor.)</p>
}</code></pre>
</div>
</div>
-</div>
-<div class="sect3">
-<h4 id="_accessdecisionvoter">AccessDecisionVoter</h4>
+<div class="sect2">
+<h3 id="_accessdecisionvoter">AccessDecisionVoter</h3>
<div class="paragraph">
-<p>This interface is (besides the <code>Secured</code> annotation) the most important
+<p>This interface is (besides the <code>@Secured</code> annotation) the most important
part of the concept. Both artifact types are also the only required
parts:</p>
</div>
@@ -584,18 +569,14 @@ parts:</p>
}</code></pre>
</div>
</div>
-<div class="paragraph">
-<p>[TODO] tip about the changed parameter/s</p>
-</div>
</div>
-<div class="sect3">
-<h4 id="_securityviolation">SecurityViolation</h4>
+<div class="sect2">
+<h3 id="_securityviolation">SecurityViolation</h3>
<div class="paragraph">
<p>In case of a detected violation a <code>SecurityViolation</code> has to be added to
the result returned by the <code>AccessDecisionVoter</code>.</p>
</div>
</div>
-</div>
<div class="sect2">
<h3 id="_abstractaccessdecisionvoter">AbstractAccessDecisionVoter</h3>
<div class="paragraph">
@@ -617,8 +598,9 @@ This is a convenience class which allows
}</code></pre>
</div>
</div>
-<div class="sect3">
-<h4 id="__secured_and_stereotypes_with_custom_meta_data">@Secured and Stereotypes with Custom Meta-data</h4>
+</div>
+<div class="sect2">
+<h3 id="__secured_and_stereotypes_with_custom_metadata">@Secured and stereotypes with custom metadata</h3>
<div class="paragraph">
<p>If there are multiple <code>AccessDecisionVoter</code> and maybe in different
constellations, it is easier to provide an expressive CDI stereotypes for
@@ -644,10 +626,10 @@ place.</p>
</div>
</div>
<div class="paragraph">
-<p>Furthermore, it is possible to provide custom meta-data easily.</p>
+<p>Furthermore, it is possible to provide custom metadata easily.</p>
</div>
<div class="listingblock">
-<div class="title">Stereotype of @Secured with Custom Meta-data</div>
+<div class="title">Stereotype of @Secured with custom metadata</div>
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Named</span>
<span class="annotation">@Admin</span>(securityLevel=<span class="integer">3</span>)
@@ -679,156 +661,6 @@ place.</p>
</div>
</div>
</div>
-</div>
-<div class="sect2">
-<h3 id="_making_intitially_requested_and_secured_page_available_for_redirect_after_login">Making Intitially Requested and Secured Page available for Redirect after Login</h3>
-<div class="paragraph">
-<p>DeltaSpike can be combined with pure CDI or with any other security
-frameworks (like PicketLink) to track the denied page and make it
-available after user logs in.</p>
-</div>
-<div class="sect3">
-<h4 id="_cdi_implementation_to_redirect_the_login_to_the_first_denied_page">CDI Implementation to Redirect the Login to the First Denied Page</h4>
-<div class="paragraph">
-<p>Your LoginService will fire a custom <code>UserLoggedInEvent</code></p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">LoginService</span> <span class="directive">implements</span> <span class="predefined-type">Serializable</span> {
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> <span class="predefined-type">Event</span><UserLoggedInEvent> userLoggedInEvent;
-
- <span class="directive">public</span> Usuario login(<span class="predefined-type">String</span> username, <span class="type">char</span><span class="type">[]</span> password) {
- <span class="comment">//do the loggin process</span>
- userLoggedInEvent.fire(<span class="keyword">new</span> UserLoggedInEvent());
- }
-
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Use @SessionScoped or @WindowScoped for AdminAccessDecisionVoter and
-store the denied page on your own.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@SessionScoped</span> <span class="comment">//or @WindowScoped</span>
-<span class="directive">public</span> <span class="type">class</span> <span class="class">AdminAccessDecisionVoter</span> <span class="directive">extends</span> AbstractAccessDecisionVoter {
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> ViewConfigResolver viewConfigResolver;
-
- <span class="directive">private</span> <span class="predefined-type">Class</span><? <span class="directive">extends</span> ViewConfig> deniedPage = Pages.Home.class;
-
- <span class="annotation">@Override</span>
- <span class="directive">protected</span> <span class="type">void</span> checkPermission(AccessDecisionVoterContext context, <span class="predefined-type">Set</span><SecurityViolation> violations) {
- <span class="keyword">if</span>(loggedIn) {
- <span class="comment">//...</span>
- } <span class="keyword">else</span> {
- violations.add(<span class="comment">/*...*/</span>);
- deniedPage = viewConfigResolver.getViewConfigDescriptor(FacesContext.getCurrentInstance().getViewRoot().getViewId()).getConfigClass();
- }
- }
-
- <span class="directive">public</span> <span class="predefined-type">Class</span><? <span class="directive">extends</span> ViewConfig> getDeniedPage() {
- <span class="keyword">try</span> {
- <span class="keyword">return</span> deniedPage;
- } <span class="keyword">finally</span> {
- deniedPage = Pages.Home.class;
- }
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>And in AuthenticationListener you inject AdminAccessDecisionVoter</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">AuthenticationListener</span> {
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> ViewNavigationHandler viewNavigationHandler;
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> AdminAccessDecisionVoter adminAccessDecisionVoter;
-
- <span class="directive">public</span> <span class="type">void</span> handleLoggedIn(<span class="annotation">@Observes</span> UserLoggedInEvent event) {
- <span class="local-variable">this</span>.viewNavigationHandler.navigateTo(adminAccessDecisionVoter.getDeniedPage());
- }
-
-}</code></pre>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_picketlink_implementation_to_redirect_the_login_to_the_first_denied_page">PicketLink Implementation to Redirect the Login to the First Denied Page</h4>
-<div class="paragraph">
-<p>Once that PicketLink handles the authentication for you, you only need
-to store the denied page and observe PicketLink <code>LoggedInEvent</code> to
-redirect you back to the denied page.</p>
-</div>
-<div class="paragraph">
-<p>Use @SessionScoped or @WindowScoped for AdminAccessDecisionVoter and
-store the denied page on your own.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@SessionScoped</span> <span class="comment">//or @WindowScoped</span>
-<span class="directive">public</span> <span class="type">class</span> <span class="class">AdminAccessDecisionVoter</span> <span class="directive">extends</span> AbstractAccessDecisionVoter {
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> ViewConfigResolver viewConfigResolver;
-
- <span class="directive">private</span> <span class="predefined-type">Class</span><? <span class="directive">extends</span> ViewConfig> deniedPage = Pages.Home.class;
-
- <span class="annotation">@Override</span>
- <span class="directive">protected</span> <span class="type">void</span> checkPermission(AccessDecisionVoterContext context, <span class="predefined-type">Set</span><SecurityViolation> violations) {
-
- AuthorizationChecker authorizationChecker = BeanProvider.getContextualReference(AuthorizationChecker.class);
- <span class="type">boolean</span> loggedIn = authorizationChecker.isLoggedIn();
-
- <span class="keyword">if</span>(loggedIn) {
- <span class="comment">//...</span>
- } <span class="keyword">else</span> {
- violations.add(<span class="comment">/*...*/</span>);
- deniedPage = viewConfigResolver.getViewConfigDescriptor(FacesContext.getCurrentInstance().getViewRoot().getViewId()).getConfigClass();
- }
- }
-
- <span class="directive">public</span> <span class="predefined-type">Class</span><? <span class="directive">extends</span> ViewConfig> getDeniedPage() {
- <span class="keyword">try</span> {
- <span class="keyword">return</span> deniedPage;
- } <span class="keyword">finally</span> {
- deniedPage = Pages.Home.class;
- }
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>And in AuthenticationListener you inject AdminAccessDecisionVoter</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">AuthenticationListener</span> {
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> ViewNavigationHandler viewNavigationHandler;
-
- <span class="annotation">@Inject</span>
- <span class="directive">private</span> AdminAccessDecisionVoter adminAccessDecisionVoter;
-
- <span class="directive">public</span> <span class="type">void</span> handleLoggedIn(<span class="annotation">@Observes</span> LoggedInEvent event) {
- <span class="local-variable">this</span>.viewNavigationHandler.navigateTo(adminAccessDecisionVoter.getDeniedPage());
- }
-
-}</code></pre>
-</div>
-</div>
-</div>
-</div>
<div class="sect2">
<h3 id="_accessdecisionvotercontext">AccessDecisionVoterContext</h3>
<div class="paragraph">
@@ -858,8 +690,9 @@ the results of the security check.</p>
</li>
</ul>
</div>
-<div class="sect3">
-<h4 id="_securitystrategy_spi">SecurityStrategy SPI</h4>
+</div>
+<div class="sect2">
+<h3 id="_securitystrategy_spi">SecurityStrategy SPI</h3>
<div class="paragraph">
<p>The <code>SecurityStrategy</code> interface allows to provide a custom
implementation which should be used for <code>@Secured</code>. Provide a custom
@@ -883,13 +716,39 @@ implementation as bean-class in combinat
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
-The configuration for global-alternatives is following the pattern:
-globalAlternatives.<code><interface-name></code>=<code><implementation-class-name></code>
+The configuration for global alternatives is following the pattern:
+<code>globalAlternatives.<em><interface-name></em>=<em><implementation-class-name></em></code>
</td>
</tr>
</table>
</div>
</div>
+<div class="sect2">
+<h3 id="_examples">Examples</h3>
+<div class="sect3">
+<h4 id="_redirect_to_requested_page_after_login">Redirect to requested page after login</h4>
+<div class="paragraph">
+<p>DeltaSpike can be combined with pure CDI or with any other security
+frameworks (like PicketLink) to track the denied page and make it
+available after user logs in.</p>
+</div>
+<div class="paragraph">
+<p>An example of this use case is available in the examples module in the DeltaSpike repository:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://github.com/apache/deltaspike/tree/master/deltaspike/examples/security-requested-page-after-login-cdi">Making initially requested secured page available for redirect after login with CDI</a></p>
+</li>
+<li>
+<p><a href="https://github.com/apache/deltaspike/tree/master/deltaspike/examples/security-requested-page-after-login-picketlink">Making initially requested secured page available for redirect after login with PicketLink</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The relevant classes are <code>AuthenticationListener</code> and <code>LoggedInAccessDecisionVoter</code>.</p>
+</div>
+</div>
</div>
</div>
</div>
@@ -918,36 +777,24 @@ globalAlternatives.<code><interface-n
<div class="fallback-toc">
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a>
+<li><a href="#_project_setup">Project Setup</a>
<ul class="sectlevel2">
<li><a href="#_1_declare_security_module_dependencies">1. Declare Security Module Dependencies</a></li>
-<li><a href="#_2_enable_the_security_interceptor">2. Enable the Security Interceptor</a></li>
+<li><a href="#_2_enable_the_securityinterceptor">2. Enable the SecurityInterceptor</a></li>
</ul>
</li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
+<li><a href="#_simple_interceptor_style_authorization">Simple interceptor-style authorization</a></li>
+<li><a href="#_advanced_authorization">Advanced authorization</a>
<ul class="sectlevel2">
-<li><a href="#_securitybinding_for_class_and_method_invocations">SecurityBinding for Class and Method Invocations</a></li>
-<li><a href="#_integrating_third_party_security_frameworks">Integrating Third-party Security Frameworks</a>
-<ul class="sectlevel3">
-<li><a href="#__secured">@Secured</a></li>
<li><a href="#_accessdecisionvoter">AccessDecisionVoter</a></li>
<li><a href="#_securityviolation">SecurityViolation</a></li>
-</ul>
-</li>
-<li><a href="#_abstractaccessdecisionvoter">AbstractAccessDecisionVoter</a>
-<ul class="sectlevel3">
-<li><a href="#__secured_and_stereotypes_with_custom_meta_data">@Secured and Stereotypes with Custom Meta-data</a></li>
-</ul>
-</li>
-<li><a href="#_making_intitially_requested_and_secured_page_available_for_redirect_after_login">Making Intitially Requested and Secured Page available for Redirect after Login</a>
-<ul class="sectlevel3">
-<li><a href="#_cdi_implementation_to_redirect_the_login_to_the_first_denied_page">CDI Implementation to Redirect the Login to the First Denied Page</a></li>
-<li><a href="#_picketlink_implementation_to_redirect_the_login_to_the_first_denied_page">PicketLink Implementation to Redirect the Login to the First Denied Page</a></li>
-</ul>
-</li>
-<li><a href="#_accessdecisionvotercontext">AccessDecisionVoterContext</a>
-<ul class="sectlevel3">
+<li><a href="#_abstractaccessdecisionvoter">AbstractAccessDecisionVoter</a></li>
+<li><a href="#__secured_and_stereotypes_with_custom_metadata">@Secured and stereotypes with custom metadata</a></li>
+<li><a href="#_accessdecisionvotercontext">AccessDecisionVoterContext</a></li>
<li><a href="#_securitystrategy_spi">SecurityStrategy SPI</a></li>
+<li><a href="#_examples">Examples</a>
+<ul class="sectlevel3">
+<li><a href="#_redirect_to_requested_page_after_login">Redirect to requested page after login</a></li>
</ul>
</li>
</ul>
Modified: deltaspike/site/trunk/content/staging/documentation/servlet.html
URL: http://svn.apache.org/viewvc/deltaspike/site/trunk/content/staging/documentation/servlet.html?rev=1682851&r1=1682850&r2=1682851&view=diff
==============================================================================
--- deltaspike/site/trunk/content/staging/documentation/servlet.html (original)
+++ deltaspike/site/trunk/content/staging/documentation/servlet.html Mon Jun 1 09:41:35 2015
@@ -281,7 +281,7 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
<div class="sect1">
-<h2 id="_configure_your_projects">Configure Your Projects</h2>
+<h2 id="_project_setup">Project Setup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The configuration information provided here is for Maven-based projects and it assumes that you have already declared the DeltaSpike version and DeltaSpike Core module for your projects, as detailed in <a href="configure.html">Configure DeltaSpike in Your Projects</a>. For Maven-independent projects, see <a href="configure.html#config-maven-indep">Configure DeltaSpike in Maven-independent Projects</a>.</p>
@@ -309,11 +309,8 @@ table.CodeRay td.code>pre{padding:0}
</div>
</div>
</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_2_configure_listeners_and_filters">2. Configure Listeners and Filters</h2>
-<div class="sectionbody">
+<div class="sect2">
+<h3 id="_2_configure_listeners_and_filters">2. Configure Listeners and Filters</h3>
<div class="paragraph">
<p>In most cases there is no need for any additional configuration beside
adding the required dependencies to your project, because all required
@@ -384,11 +381,10 @@ register the listeners and filters in yo
</div>
</div>
</div>
+</div>
<div class="sect1">
-<h2 id="_use_the_module_features">Use the Module Features</h2>
+<h2 id="_injectable_servlet_objects">Injectable Servlet Objects</h2>
<div class="sectionbody">
-<div class="sect2">
-<h3 id="_injectable_servlet_objects">Injectable Servlet Objects</h3>
<div class="paragraph">
<p>The DeltaSpike Servlet module contains producers for many objects of a
Servlet environment. All produces are using the special qualifier
@@ -404,8 +400,8 @@ injection of some Servlet objects out of
<span class="directive">private</span> ServletObject servletObject;</code></pre>
</div>
</div>
-<div class="sect3">
-<h4 id="_servletcontext">ServletContext</h4>
+<div class="sect2">
+<h3 id="_servletcontext">ServletContext</h3>
<div class="paragraph">
<p>The <code>ServletContext</code> is made available in the application scope. It can
be injected into any CDI bean like this:</p>
@@ -417,8 +413,8 @@ be injected into any CDI bean like this:
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_servletrequest_httpservletrequest">ServletRequest / HttpServletRequest</h4>
+<div class="sect2">
+<h3 id="_servletrequest_httpservletrequest">ServletRequest / HttpServletRequest</h3>
<div class="paragraph">
<p>The <code>ServletRequest</code> is made available in the request scope. The current
request can be injected into a CDI bean like this:</p>
@@ -439,8 +435,8 @@ request can be injected into a CDI bean
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_servletresponse_httpservletresponse">ServletResponse / HttpServletResponse</h4>
+<div class="sect2">
+<h3 id="_servletresponse_httpservletresponse">ServletResponse / HttpServletResponse</h3>
<div class="paragraph">
<p>The <code>ServletResponse</code> is made available in the request scope. The
current response can be injected into a CDI bean like this:</p>
@@ -461,8 +457,8 @@ current response can be injected into a
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="_httpsession">HttpSession</h4>
+<div class="sect2">
+<h3 id="_httpsession">HttpSession</h3>
<div class="paragraph">
<p>The <code>HttpSession</code> is made available in the session scope. You can inject
the current session of a user into a CDI bean like this:</p>
@@ -478,8 +474,8 @@ the current session of a user into a CDI
of a session.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_principal">Principal</h4>
+<div class="sect2">
+<h3 id="_principal">Principal</h3>
<div class="paragraph">
<p>The <code>Principal</code> is made available in the request scope. The current
principal can be injected into a CDI bean like this:</p>
@@ -496,8 +492,10 @@ principal can be injected into a CDI bea
</div>
</div>
</div>
-<div class="sect2">
-<h3 id="_servlet_event_propagation">Servlet Event Propagation</h3>
+</div>
+<div class="sect1">
+<h2 id="_servlet_event_propagation">Servlet Event Propagation</h2>
+<div class="sectionbody">
<div class="paragraph">
<p>The DeltaSpike Servlet module propagates a number of Servlet object
lifecycle events to the CDI event bus. This allows regular CDI beans to
@@ -512,8 +510,8 @@ object, DeltaSpike uses the qualifiers <
<p>The following sections shows which concrete Servlet objects are
supported and how their lifecycle can be observed.</p>
</div>
-<div class="sect3">
-<h4 id="_servlet_context_lifecycle_events">Servlet Context Lifecycle Events</h4>
+<div class="sect2">
+<h3 id="_servlet_context_lifecycle_events">Servlet Context Lifecycle Events</h3>
<div class="paragraph">
<p>The Servlet module supports initialization and destruction events for
the <code>ServletContext</code>. These events can for example be used to detect
@@ -547,8 +545,8 @@ also simply remove the entry for the <co
your <code>web.xml</code> to disable the events.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_request_and_response_lifecycle_events">Request and Response Lifecycle Events</h4>
+<div class="sect2">
+<h3 id="_request_and_response_lifecycle_events">Request and Response Lifecycle Events</h3>
<div class="paragraph">
<p>The Servlet module also supports initialization and destruction events
for the <code>HttpServletRequest</code> and <code>HttpServletResponse</code>. These events can
@@ -601,8 +599,8 @@ also simply remove the entry for the <co
<code>web.xml</code> to disable the events.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_session_lifecycle_events">Session Lifecycle Events</h4>
+<div class="sect2">
+<h3 id="_session_lifecycle_events">Session Lifecycle Events</h3>
<div class="paragraph">
<p>The last category of events supported by the DeltaSpike Servlet module
are the lifecycle events for the user’s HTTP session. The following
@@ -637,7 +635,6 @@ your <code>web.xml</code> to disable the
</div>
</div>
</div>
-</div>
</div>
</div>
@@ -663,16 +660,14 @@ your <code>web.xml</code> to disable the
<div class="fallback-toc">
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
-<li><a href="#_configure_your_projects">Configure Your Projects</a>
+<li><a href="#_project_setup">Project Setup</a>
<ul class="sectlevel2">
<li><a href="#_1_declare_servlet_module_dependencies">1. Declare Servlet Module Dependencies</a></li>
+<li><a href="#_2_configure_listeners_and_filters">2. Configure Listeners and Filters</a></li>
</ul>
</li>
-<li><a href="#_2_configure_listeners_and_filters">2. Configure Listeners and Filters</a></li>
-<li><a href="#_use_the_module_features">Use the Module Features</a>
-<ul class="sectlevel2">
<li><a href="#_injectable_servlet_objects">Injectable Servlet Objects</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_servletcontext">ServletContext</a></li>
<li><a href="#_servletrequest_httpservletrequest">ServletRequest / HttpServletRequest</a></li>
<li><a href="#_servletresponse_httpservletresponse">ServletResponse / HttpServletResponse</a></li>
@@ -681,15 +676,13 @@ your <code>web.xml</code> to disable the
</ul>
</li>
<li><a href="#_servlet_event_propagation">Servlet Event Propagation</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_servlet_context_lifecycle_events">Servlet Context Lifecycle Events</a></li>
<li><a href="#_request_and_response_lifecycle_events">Request and Response Lifecycle Events</a></li>
<li><a href="#_session_lifecycle_events">Session Lifecycle Events</a></li>
</ul>
</li>
</ul>
-</li>
-</ul>
</div>
</div>