You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by bu...@apache.org on 2013/04/01 22:21:43 UTC

svn commit: r856910 - in /websites/staging/deltaspike/trunk/content: ./ deltaspike/jsf.html

Author: buildbot
Date: Mon Apr  1 20:21:43 2013
New Revision: 856910

Log:
Staging update by buildbot for deltaspike

Modified:
    websites/staging/deltaspike/trunk/content/   (props changed)
    websites/staging/deltaspike/trunk/content/deltaspike/jsf.html

Propchange: websites/staging/deltaspike/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Apr  1 20:21:43 2013
@@ -1 +1 @@
-1463099
+1463285

Modified: websites/staging/deltaspike/trunk/content/deltaspike/jsf.html
==============================================================================
--- websites/staging/deltaspike/trunk/content/deltaspike/jsf.html (original)
+++ websites/staging/deltaspike/trunk/content/deltaspike/jsf.html Mon Apr  1 20:21:43 2013
@@ -84,7 +84,11 @@
 <li><a href="#intro">Intro</a></li>
 <li><a href="#motivation">Motivation</a></li>
 <li><a href="#basic-api-usages">Basic API usages</a><ul>
-<li><a href="#using-folder">Using @Folder</a></li>
+<li><a href="#file-view-and-folder-folder-paths">File (@View) and Folder (@Folder) paths</a><ul>
+<li><a href="#foldername">@Folder#name</a></li>
+<li><a href="#view">@View</a></li>
+</ul>
+</li>
 <li><a href="#navigation-parameters">Navigation Parameters</a><ul>
 <li><a href="#static-configuration-via-navigationparameter">Static Configuration via @NavigationParameter</a></li>
 <li><a href="#dynamic-configuration-via-navigationparametercontext">Dynamic Configuration via NavigationParameterContext</a></li>
@@ -102,9 +106,11 @@
 <li><a href="#advanced-api-usages">Advanced API usages</a><ul>
 <li><a href="#creating-custom-meta-data-via-viewmetadata">Creating Custom Meta-Data via @ViewMetaData</a></li>
 <li><a href="#creating-custom-callbacks-via-viewmetadata">Creating Custom Callbacks via @ViewMetaData</a></li>
+<li><a href="#creating-custom-inline-meta-data-via-inlineviewmetadata">Creating Custom inline Meta-Data via @InlineViewMetaData</a></li>
 </ul>
 </li>
 <li><a href="#view-config-spi">View-Config SPI</a></li>
+<li><a href="#activation-of-custom-naming-conventions">Activation of custom naming conventions</a></li>
 </ul>
 </li>
 <li><a href="#support-of-ear-deployments">Support of EAR deployments</a></li>
@@ -236,8 +242,134 @@ One of those annotations provided by the
 </pre></div>
 
 
-<h3 id="using-folder">Using @Folder</h3>
-<p>[TODO]</p>
+<h3 id="file-view-and-folder-folder-paths">File (@View) and Folder (@Folder) paths</h3>
+<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 if they don't inherit from <code>org.apache.deltaspike.core.api.config.view.ViewConfig</code> <strong>nor</strong> have a view-config for a page nested into them (like Pages.Wizard1.Step1).
+If it isn't used explicitly, it gets added automatically (so you can query the meta-data at runtime even in cases you haven't placed the annotations explicitly).
+<code>@View</code> allows to customize a bit more and it also gets added automatically if it isn't used explicitly.
+Whereas <code>@Folder</code> gets added to all nested interfaces (above a view-config class - like Pages and Pages.Wizard1), <code>@View</code> only gets added to classes which in-/directly inherit from <code>org.apache.deltaspike.core.api.config.view.ViewConfig</code> (like Pages.Wizard1.Step1).</p>
+<p>That means at runtime the following two configs lead to the same.</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Pages</span>
+<span class="o">{</span>
+    <span class="kd">interface</span> <span class="nc">Wizard1</span>
+    <span class="o">{</span>
+        <span class="kd">class</span> <span class="nc">Step1</span> <span class="kd">implements</span> <span class="n">ViewConfig</span> <span class="o">{</span> <span class="o">}</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="c1">//leads to the same as</span>
+
+<span class="nd">@Folder</span>
+<span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Pages</span>
+<span class="o">{</span>
+    <span class="nd">@Folder</span>
+    <span class="kd">interface</span> <span class="nc">Wizard1</span>
+    <span class="o">{</span>
+        <span class="nd">@View</span>
+        <span class="kd">class</span> <span class="nc">Step1</span> <span class="kd">implements</span> <span class="n">ViewConfig</span> <span class="o">{</span> <span class="o">}</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>The example above leads to the following paths:</p>
+<ul>
+<li>/pages/</li>
+<li>/pages/wizard1</li>
+<li>/pages/wizard1/step1.xhtml</li>
+</ul>
+<p>To customize it you can use <code>@Folder#name</code>, <code>@View#basePath</code>, <code>@View#name</code> and <code>@View#extension</code> (or you register custom <code>NameBuilder</code>s inline or globally).</p>
+<h4 id="foldername">@Folder#name</h4>
+<p>The rules are pretty simple. You get what you write. There are only two additional features:</p>
+<ul>
+<li>You don't have to care about duplicated '/' (e.g. /folder1//folder2/step1.xhtml would get corrected auto. to /folder1/folder2/step1.xhtml</li>
+<li>With "." at the beginning (e.g. "./") you can keep the path before.</li>
+</ul>
+<p>The following example</p>
+<div class="codehilite"><pre><span class="kd">interface</span> <span class="nc">Pages</span>
+<span class="o">{</span>
+    <span class="nd">@Folder</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;/w1/&quot;</span><span class="o">)</span>
+    <span class="kd">interface</span> <span class="nc">Wizard1</span>
+    <span class="o">{</span>
+        <span class="kd">class</span> <span class="nc">Step1</span> <span class="kd">implements</span> <span class="n">ViewConfig</span> <span class="o">{</span> <span class="o">}</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Folder</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;./w2/&quot;</span><span class="o">)</span>
+    <span class="kd">interface</span> <span class="nc">Wizard2</span> <span class="kd">extends</span> <span class="n">ViewConfig</span>
+    <span class="o">{</span>
+        <span class="kd">class</span> <span class="nc">Step1</span> <span class="kd">implements</span> <span class="n">Wizard2</span> <span class="o">{</span> <span class="o">}</span>   <span class="c1">//ViewConfig is inherited indirectly</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>leads to the following paths:</p>
+<ul>
+<li>/pages/</li>
+<li>/w1/</li>
+<li>/w1/step1.xhtml</li>
+<li>/pages/w2/step1.xhtml</li>
+</ul>
+<h4 id="view">@View</h4>
+<p>The same naming rules apply to <code>@View#basePath</code>. However, it's only valid to be used at view-config nodes which represent pages (-&gt; classes and not interfaces).
+On interfaces always use <code>@Folder</code> (<code>@View#basePath</code> will get ignored there).</p>
+<p>interface Pages
+{
+    interface Wizard1
+    {
+        @View //optional
+        class Step1 implements ViewConfig { }</p>
+<div class="codehilite"><pre>    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step2</span> <span class="n">implements</span> <span class="n">ViewConfig</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;./&quot;</span><span class="p">)</span> <span class="sr">//o</span><span class="n">r</span> <span class="n">just</span> <span class="s">&quot;.&quot;</span>
+    <span class="n">class</span> <span class="n">Step3</span> <span class="n">implements</span> <span class="n">ViewConfig</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;/w1/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step4</span> <span class="n">implements</span> <span class="n">ViewConfig</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;./w1/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step5</span> <span class="n">implements</span> <span class="n">ViewConfig</span> <span class="p">{</span> <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>}</p>
+<p>leads to the following paths:</p>
+<ul>
+<li>/pages</li>
+<li>/pages/wizard1/</li>
+<li>/pages/wizard1/step1.xhtml</li>
+<li>/step2.xhtml</li>
+<li>/pages/wizard1/step3.xhtml</li>
+<li>/w1/step4.xhtml</li>
+<li>/pages/wizard/w1/step5.xhtml</li>
+</ul>
+<p>and depending on additional meta-data you would like to inherit (e.g. <code>@View(navigation = REDIRECT)</code>, you can also use:</p>
+<p>@View(navigation = REDIRECT)
+interface Pages extends ViewConfig 
+{
+    interface Wizard1 extends Pages
+    {
+        @View
+        class Step1 implements Wizard1 { }</p>
+<div class="codehilite"><pre>    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step2</span> <span class="n">implements</span> <span class="n">Wizard1</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;./&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step3</span> <span class="n">implements</span> <span class="n">Wizard1</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;/w1/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step4</span> <span class="n">implements</span> <span class="n">Wizard1</span> <span class="p">{</span> <span class="p">}</span>
+
+    <span class="nv">@View</span><span class="p">(</span><span class="n">basePath</span> <span class="o">=</span> <span class="s">&quot;./w1/&quot;</span><span class="p">)</span>
+    <span class="n">class</span> <span class="n">Step5</span> <span class="n">implements</span> <span class="n">Wizard1</span> <span class="p">{</span> <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>}</p>
+<p>It leads to the same paths, but in addition <code>@View#navigation</code> gets inherited along the inheritance path.</p>
 <h3 id="navigation-parameters">Navigation Parameters</h3>
 <p>Since the view-config is static, an approach to add parameters is needed. The following part shows different possibilities to add parameters which end up in the final URL after '?' (in case of the integration with JSF).
 It isn't needed to add all (types of) parameters that way. Some get added autom. based on special meta-data (e.g. <code>@View#navigation</code> and <code>@View#viewParams</code>). Instead of adding <code>"faces-redirect=true"</code> manually it's done for you as soon as you are using <code>@View(navigation = REDIRECT)</code>. The same goes for <code>"includeViewParams=true"</code> and <code>@View(viewParams = INCLUDE)</code>.</p>
@@ -484,7 +616,8 @@ Furthermore, it's also possible to use i
 
 <p>However, in case of JSF you have to ensure that you are at a valid point in the JSF request-lifecycle for a navigation, because invocation gets transformed to a std. (implicit) JSF navigation.</p>
 <h3 id="using-matches">Using @Matches</h3>
-<p>This annotation is currently not integrated.</p>
+<p>This annotation is currently not integrated.
+[TODO]</p>
 <h3 id="using-viewconfigresolver">Using ViewConfigResolver</h3>
 <p>If you would like to query view-meta-data yourself (for whatever reason), you can do that with <code>ViewConfigResolver</code>.</p>
 <div class="codehilite"><pre><span class="nd">@RequestScoped</span>
@@ -536,8 +669,11 @@ Furthermore, it's also possible to use i
 <p>[TODO]</p>
 <h3 id="creating-custom-callbacks-via-viewmetadata">Creating Custom Callbacks via @ViewMetaData</h3>
 <p>[TODO]</p>
+<h3 id="creating-custom-inline-meta-data-via-inlineviewmetadata">Creating Custom inline Meta-Data via @InlineViewMetaData</h3>
+<p>[TODO]</p>
 <h2 id="view-config-spi">View-Config SPI</h2>
 <p>[TODO]</p>
+<h2 id="activation-of-custom-naming-conventions">Activation of custom naming conventions</h2>
 <h1 id="support-of-ear-deployments">Support of EAR deployments</h1>
 <p>Before using features described by this page, please ensure that you are aware of <a href="https://issues.apache.org/jira/browse/DELTASPIKE-335">DELTASPIKE-335</a> and the corresponding impact.</p>
           </div>