ISIS-1503 and ISIS-1548: further documentation updates for these tickets (@Mixin, @DomainObject, UserService, AuthenticationSessionProvider, SudoService)
Project: http://git-wip-us.apache.org/repos/asf/isis-site/repo Commit: http://git-wip-us.apache.org/repos/asf/isis-site/commit/ec8b5981 Tree: http://git-wip-us.apache.org/repos/asf/isis-site/tree/ec8b5981 Diff: http://git-wip-us.apache.org/repos/asf/isis-site/diff/ec8b5981 Branch: refs/heads/asf-site Commit: ec8b59810b337684a2202027f19fc4be2e9bb718 Parents: c6476ff Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Thu Dec 1 11:01:41 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Thu Dec 1 11:01:41 2016 +0000 ---------------------------------------------------------------------- content/guides/rgant.html | 473 +- content/guides/rgant.pdf | 70853 +++++++++++++++++++++------------------ content/guides/rgfis.html | 3 + content/guides/rgfis.pdf | 1420 +- content/guides/rgsvc.html | 179 +- content/guides/rgsvc.pdf | 12065 ++++--- content/guides/ugbtb.html | 340 +- content/guides/ugbtb.pdf | 14905 +++++--- 8 files changed, 56475 insertions(+), 43763 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis-site/blob/ec8b5981/content/guides/rgant.html ---------------------------------------------------------------------- diff --git a/content/guides/rgant.html b/content/guides/rgant.html index 7e6cba1..93dd720 100644 --- a/content/guides/rgant.html +++ b/content/guides/rgant.html @@ -5134,6 +5134,14 @@ can be used instead, eg:</p> </div></div></td> </tr> <tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgant-DomainObject_mixinMethod"><code>mixinMethod()</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Method name within the mixin</p></td> +<td class="tableblock halign-left valign-top"><div><div class="paragraph"> +<p>(As of <code>1.13.2-SNAPSHOT</code>) How to recognize the "reserved" method name, meaning that the mixin’s own name will be inferred from the mixin type. +Typical examples are "exec", "execute", "invoke", "apply" and so on.</p> +</div></div></td> +</tr> +<tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgant-DomainObject_nature"><code>nature()</code></a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>NOT_SPECIFIED</code>, <code>JDO_ENTITY</code>, <code>EXTERNAL_ENTITY</code>, <code>INMEMORY_ENTITY</code>, <code>MIXIN</code>, <code>VIEW_MODEL</code> (<code>NOT_SPECIFIED</code>)</p></td> <td class="tableblock halign-left valign-top"><div><div class="paragraph"> @@ -5783,7 +5791,46 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_nature">10.7. <code>nature()</code></h3> +<h3 id="_rgant-DomainObject_mixinMethod">10.7. <code>mixinMethod()</code> (<code>1.13.2-SNAPSHOT</code>)</h3> +<div class="paragraph"> +<p>The <code>mixinMethod()</code> attribute specifies the name of the method to be treated as a "reserved" method name, meaning that the mixin’s name should instead be inferred from the mixin’s type.</p> +</div> +<div class="paragraph"> +<p>For example:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainObject</span> +<span class="directive">public</span> <span class="type">class</span> <span class="class">Customer</span> { + + <span class="annotation">@DomainObject</span>(nature=Nature.MIXIN, mixinMethod=<span class="string"><span class="delimiter">"</span><span class="content">execute</span><span class="delimiter">"</span></span>) + <span class="directive">public</span> <span class="directive">static</span> <span class="type">class</span> <span class="class">placeOrder</span> { + + Customer customer; + <span class="directive">public</span> placeOrder(Customer customer) { <span class="local-variable">this</span>.customer = customer; } + + <span class="directive">public</span> Customer execute(Product p, <span class="type">int</span> quantity) { ... } + <span class="directive">public</span> <span class="predefined-type">String</span> disableExecute() { ... } + <span class="directive">public</span> <span class="predefined-type">String</span> validate0Execute() { ... } + } + ... +)</code></pre> +</div> +</div> +<div class="paragraph"> +<p>This allows all mixins to follow a similar convention, with the name of the mixin inferred entirely from its type ("placeOrder").</p> +</div> +<div class="paragraph"> +<p>When invoked programmatically, the code reads:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight"><code data-lang="java">mixin(Customer.placeOrder.class, someCustomer).execute(someProduct, <span class="integer">3</span>);</code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_rgant-DomainObject_nature">10.8. <code>nature()</code></h3> <div class="paragraph"> <p>The <code>nature()</code> attribute is used to characterize the domain object as either an entity (part of the domain layer) or as a view model (part of the application layer). If the domain object should be thought of as an entity, it also captures how the persistence of that entity is managed.</p> </div> @@ -5882,7 +5929,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_persistedLifecycleEvent">10.8. persistedLifecycleEvent()</h3> +<h3 id="_rgant-DomainObject_persistedLifecycleEvent">10.9. persistedLifecycleEvent()</h3> <div class="paragraph"> <p>Whenever a (just created, still transient) domain object has been saved (INSERTed in)to the database, a "persisted" lifecycle event is fired.</p> @@ -5940,7 +5987,7 @@ attribute is available for other lifecycle events.</p> <p>The benefit is that subscribers can be more targeted as to the events that they subscribe to.</p> </div> <div class="sect3"> -<h4 id="_subscribers_5">10.8.1. Subscribers</h4> +<h4 id="_subscribers_5">10.9.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) @@ -5990,7 +6037,7 @@ using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The e </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_5">10.8.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_5">10.9.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>persistedLifecycleEvent</code> attribute is not explicitly specified (is left as its default value, <code>ObjectPersistedEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -6011,7 +6058,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_persistingLifecycleEvent">10.9. persistingLifecycleEvent()</h3> +<h3 id="_rgant-DomainObject_persistingLifecycleEvent">10.10. persistingLifecycleEvent()</h3> <div class="paragraph"> <p>Whenever a (just created, still transient) domain object is about to be saved (INSERTed in)to the database, a "persisting" lifecycle event is fired.</p> @@ -6072,7 +6119,7 @@ attribute is available for other lifecycle events.</p> <p>The benefit is that subscribers can be more targeted as to the events that they subscribe to.</p> </div> <div class="sect3"> -<h4 id="_subscribers_6">10.9.1. Subscribers</h4> +<h4 id="_subscribers_6">10.10.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) @@ -6122,7 +6169,7 @@ using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The e </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_6">10.9.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_6">10.10.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>persistingLifecycleEvent</code> attribute is not explicitly specified (is left as its default value, <code>ObjectPersistingEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -6143,7 +6190,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_objectType">10.10. <code>objectType()</code></h3> +<h3 id="_rgant-DomainObject_objectType">10.11. <code>objectType()</code></h3> <div class="paragraph"> <p>The <code>objectType()</code> attribute is used to provide a unique alias for the object’s class name.</p> </div> @@ -6221,7 +6268,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_publishing">10.11. <code>publishing()</code></h3> +<h3 id="_rgant-DomainObject_publishing">10.12. <code>publishing()</code></h3> <div class="paragraph"> <p>The <code>publishing()</code> attribute determines whether and how a modified object instance is published via the registered implementation of a <a href="rgsvc.html#_rgsvc_spi_PublishingService"><code>PublishingService</code></a>) or @@ -6280,7 +6327,7 @@ property edits are published as events.</p> </table> </div> <div class="sect3"> -<h4 id="__code_publishingpayloadfactory_code_2">10.11.1. <code>publishingPayloadFactory()</code></h4> +<h4 id="__code_publishingpayloadfactory_code_2">10.12.1. <code>publishingPayloadFactory()</code></h4> <div class="paragraph"> <p>The (optional) related <code>publishingPayloadFactory()</code> specifies the class to use to create the (payload of the) event to be published by the publishing factory.</p> @@ -6309,7 +6356,7 @@ is ignored by the replacement <a href="rgsvc.html#_rgsvc_spi_PublisherService">< </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_removingLifecycleEvent">10.12. removingLifecycleEvent()</h3> +<h3 id="_rgant-DomainObject_removingLifecycleEvent">10.13. removingLifecycleEvent()</h3> <div class="paragraph"> <p>Whenever a (persistent) domain object is about to be removed (DELETEd) from the database, a "removing" lifecycle event is fired.</p> @@ -6370,7 +6417,7 @@ attribute is available for other lifecycle events.</p> <p>The benefit is that subscribers can be more targeted as to the events that they subscribe to.</p> </div> <div class="sect3"> -<h4 id="_subscribers_7">10.12.1. Subscribers</h4> +<h4 id="_subscribers_7">10.13.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) @@ -6420,7 +6467,7 @@ using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The e </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_7">10.12.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_7">10.13.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>removingLifecycleEvent</code> attribute is not explicitly specified (is left as its default value, <code>ObjectRemovingEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -6441,7 +6488,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_updatingLifecycleEvent">10.13. updatingLifecycleEvent()</h3> +<h3 id="_rgant-DomainObject_updatingLifecycleEvent">10.14. updatingLifecycleEvent()</h3> <div class="paragraph"> <p>Whenever a (persistent) domain object has been modified and is about to be updated to the database, an "updating" lifecycle event is fired.</p> @@ -6502,7 +6549,7 @@ attribute is available for other lifecycle events.</p> <p>The benefit is that subscribers can be more targeted as to the events that they subscribe to.</p> </div> <div class="sect3"> -<h4 id="_subscribers_8">10.13.1. Subscribers</h4> +<h4 id="_subscribers_8">10.14.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) @@ -6552,7 +6599,7 @@ using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The e </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_8">10.13.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_8">10.14.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>updatingLifecycleEvent</code> attribute is not explicitly specified (is left as its default value, <code>ObjectUpdatingEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -6573,7 +6620,7 @@ then no event will be posted.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-DomainObject_updatedLifecycleEvent">10.14. updatedLifecycleEvent()</h3> +<h3 id="_rgant-DomainObject_updatedLifecycleEvent">10.15. updatedLifecycleEvent()</h3> <div class="paragraph"> <p>Whenever a (persistent) domain object has been modified and has been updated in the database, an "updated" lifecycle event is fired.</p> @@ -6630,7 +6677,7 @@ attribute is available for other lifecycle events.</p> <p>The benefit is that subscribers can be more targeted as to the events that they subscribe to.</p> </div> <div class="sect3"> -<h4 id="_subscribers_9">10.14.1. Subscribers</h4> +<h4 id="_subscribers_9">10.15.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) @@ -6680,7 +6727,7 @@ using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The e </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_9">10.14.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_9">10.15.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>updatedLifecycleEvent</code> attribute is not explicitly specified (is left as its default value, <code>ObjectUpdatedEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -8491,7 +8538,93 @@ so that boilerplate-busting tools such as <a href="https://projectlombok.org/">P </div> </div> <div class="sect1"> -<h2 id="_rgant-Nullable">19. <code>@Nullable</code> (<code>javax</code>)</h2> +<h2 id="_rgant-Mixin">19. <code>@Mixin</code></h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The <code>@Mixin</code> annotation indicates that the class acts as a mixin, contributing behaviour - actions, (derived) properties and (derived) collections - to another domain object.</p> +</div> +<div class="paragraph"> +<p>Mixins were originally introduced as a means of allowing contributions from one module to the types of another module; in such cases the mixin type is often an interface type (eg <code>DocumentHolder</code>) that might be implemented by numerous different concrete types. +However, mixins are also a convenient mechanism for grouping functionality even for a concrete type.</p> +</div> +<div class="paragraph"> +<p>For further discussion on using mixins, see <a href="ugbtb.html#_ugbtb_decoupling_mixins">mixins</a> in the user guide.</p> +</div> +<div class="paragraph"> +<p>The table below summarizes the annotation’s attributes.</p> +</div> +<table class="tableblock frame-all grid-all spread"> +<caption class="title">Table 16. <code>@Mixin</code> attributes</caption> +<colgroup> +<col style="width: 25%;"> +<col style="width: 25%;"> +<col style="width: 50%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Attribute</th> +<th class="tableblock halign-left valign-top">Values (default)</th> +<th class="tableblock halign-left valign-top">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_rgant-Mixin_method"><code>method()</code></a></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Method name within the mixin</p></td> +<td class="tableblock halign-left valign-top"><div><div class="paragraph"> +<p>(As of <code>1.13.2-SNAPSHOT</code>) How to recognize the "reserved" method name, meaning that the mixin’s own name will be inferred from the mixin type. +Typical examples are "exec", "execute", "invoke", "apply" and so on.</p> +</div></div></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p>An alternative and equivalent approach is to use the +<a href="#_rgant-DomainObject_nature"><code>@DomainObject#nature()</code></a> annotation with a nature of <code>MIXIN</code>.</p> +</div> +<div class="sect2"> +<h3 id="_rgant-Mixin_method">19.1. <code>method()</code> (<code>1.13.2-SNAPSHOT</code>)</h3> +<div class="paragraph"> +<p>The <code>method()</code> attribute specifies the name of the method to be treated as a "reserved" method name, meaning that the mixin’s name should instead be inferred from the mixin’s type.</p> +</div> +<div class="paragraph"> +<p>For example:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@DomainObject</span> +<span class="directive">public</span> <span class="type">class</span> <span class="class">Customer</span> { + + <span class="annotation">@Mixin</span>(method=<span class="string"><span class="delimiter">"</span><span class="content">execute</span><span class="delimiter">"</span></span>) + <span class="directive">public</span> <span class="directive">static</span> <span class="type">class</span> <span class="class">placeOrder</span> { + + Customer customer; + <span class="directive">public</span> placeOrder(Customer customer) { <span class="local-variable">this</span>.customer = customer; } + + <span class="directive">public</span> Customer execute(Product p, <span class="type">int</span> quantity) { ... } + <span class="directive">public</span> <span class="predefined-type">String</span> disableExecute() { ... } + <span class="directive">public</span> <span class="predefined-type">String</span> validate0Execute() { ... } + } + ... +)</code></pre> +</div> +</div> +<div class="paragraph"> +<p>This allows all mixins to follow a similar convention, with the name of the mixin inferred entirely from its type ("placeOrder").</p> +</div> +<div class="paragraph"> +<p>When invoked programmatically, the code reads:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight"><code data-lang="java">mixin(Customer.placeOrder.class, someCustomer).execute(someProduct, <span class="integer">3</span>);</code></pre> +</div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_rgant-Nullable">20. <code>@Nullable</code> (<code>javax</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>Apache Isis' defaults for properties and parameters is that they are mandatory unless otherwise stated. The @@ -8554,7 +8687,7 @@ Isis Maven plugin.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-NotPersistent">20. <code>@NotPersistent</code> (<code>javax.jdo</code>)</h2> +<h2 id="_rgant-NotPersistent">21. <code>@NotPersistent</code> (<code>javax.jdo</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.jdo.annotation.NotPersistent</code> annotation is used by JDO/DataNucleus to indicate that a property should not be persisted to the database.</p> @@ -8582,7 +8715,7 @@ Isis Maven plugin.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-MinLength">21. <code>@MinLength</code></h2> +<h2 id="_rgant-MinLength">22. <code>@MinLength</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@MinLength</code> annotation is used to specify the minimum number of characters in a search of an <a href="rgcms.html#_rgcms_methods_prefixes_autoComplete"><code>autoComplete…​()</code></a> supporting method.</p> @@ -8614,7 +8747,7 @@ Isis Maven plugin.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-Parameter">22. <code>@Parameter</code></h2> +<h2 id="_rgant-Parameter">23. <code>@Parameter</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@Parameter</code> annotation applies to action parameters collecting together all domain semantics within a single annotation.</p> @@ -8623,7 +8756,7 @@ Isis Maven plugin.</p> <p>The table below summarizes the annotation’s attributes.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 16. <code>@Paramter</code> attributes</caption> +<caption class="title">Table 17. <code>@Paramter</code> attributes</caption> <colgroup> <col style="width: 25%;"> <col style="width: 25%;"> @@ -8738,7 +8871,7 @@ Isis Maven plugin.</p> </table> </div> <div class="sect2"> -<h3 id="_rgant-Parameter_fileAccept">22.1. <code>fileAccept()</code></h3> +<h3 id="_rgant-Parameter_fileAccept">23.1. <code>fileAccept()</code></h3> <div class="paragraph"> <p>The <code>fileAccept()</code> attribute applies only to <a href="rgcms.html#_rgcms_classes_value-types_Blob"><code>Blob</code></a> or <a href="rgcms.html#_rgcms_classes_value-types_Clob"><code>Clob</code></a> parameters, indicating the type of file to accept when @@ -8775,7 +8908,7 @@ uploading a new value. The attribute is also supported on <a href="#_rgant-Pro </div> </div> <div class="sect2"> -<h3 id="_rgant-Parameter_maxLength">22.2. <code>maxLength()</code></h3> +<h3 id="_rgant-Parameter_maxLength">23.2. <code>maxLength()</code></h3> <div class="paragraph"> <p>The <code>maxLength()</code> attribute applies only to <code>String</code> parameters, indicating the maximum number of characters that the user may enter (for example in a text field in the UI). It is ignored if applied to parameters of any other type. This attribute can also be applied to <a href="#_rgant-Property_maxLength">properties</a>.</p> </div> @@ -8807,7 +8940,7 @@ uploading a new value. The attribute is also supported on <a href="#_rgant-Pro </div> </div> <div class="sect2"> -<h3 id="_rgant-Parameter_mustSatisfy">22.3. <code>mustSatisfy()</code></h3> +<h3 id="_rgant-Parameter_mustSatisfy">23.3. <code>mustSatisfy()</code></h3> <div class="paragraph"> <p>The <code>mustSatisfy()</code> attribute allows arbitrary validation to be applied to parameters using an (implementation of a) <code>org.apache.isis.applib.spec.Specification</code> object. The attribute is also supported on <a href="#_rgant-Property_mustSatisfy">properties</a>.</p> </div> @@ -8892,7 +9025,7 @@ uploading a new value. The attribute is also supported on <a href="#_rgant-Pro </div> </div> <div class="sect2"> -<h3 id="_rgant-Parameter_optionality">22.4. <code>optionality()</code></h3> +<h3 id="_rgant-Parameter_optionality">23.4. <code>optionality()</code></h3> <div class="paragraph"> <p>By default, Apache Isis assumes that all parameters of an action are required (mandatory). The <code>optionality()</code> attribute allows this to be relaxed. The attribute is also supported for <a href="#_rgant-Property_optionality">properties</a>.</p> </div> @@ -8948,7 +9081,7 @@ uploading a new value. The attribute is also supported on <a href="#_rgant-Pro </div> </div> <div class="sect2"> -<h3 id="_rgant-Parameter_regexPattern">22.5. <code>regexPattern()</code></h3> +<h3 id="_rgant-Parameter_regexPattern">23.5. <code>regexPattern()</code></h3> <div class="paragraph"> <p>There are three attributes related to enforcing regular expressions:</p> </div> @@ -8998,7 +9131,7 @@ the provided argument does not match the regex pattern.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-ParameterLayout">23. <code>@ParameterLayout</code></h2> +<h2 id="_rgant-ParameterLayout">24. <code>@ParameterLayout</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@ParameterLayout</code> annotation applies to action parameters, collecting together all UI hints within a single annotation.</p> @@ -9007,7 +9140,7 @@ the provided argument does not match the regex pattern.</p> <p>The table below summarizes the annotation’s attributes.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 17. <code>@ParameterLayout</code> attributes</caption> +<caption class="title">Table 18. <code>@ParameterLayout</code> attributes</caption> <colgroup> <col style="width: 25%;"> <col style="width: 25%;"> @@ -9126,7 +9259,7 @@ the provided argument does not match the regex pattern.</p> </table> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_cssClass">23.1. <code>cssClass()</code></h3> +<h3 id="_rgant-ParameterLayout_cssClass">24.1. <code>cssClass()</code></h3> <div class="paragraph"> <p>The <code>cssClass()</code> attribute can be used to render additional CSS classes in the HTML (a wrapping <code><div></code>) that represents the action parameter. <a href="rgcfg.html#_rgcfg_application-specific_application-css">Application-specific CSS</a> can then be used to target and adjust the UI representation of that particular element.</p> </div> @@ -9152,7 +9285,7 @@ the provided argument does not match the regex pattern.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_describedAs">23.2. <code>describedAs()</code></h3> +<h3 id="_rgant-ParameterLayout_describedAs">24.2. <code>describedAs()</code></h3> <div class="paragraph"> <p>The <code>describedAs()</code> attribute is used to provide a short description of the action parameter to the user. In the <a href="ugvw.html">Wicket viewer</a> it is displayed as a 'tool tip'. The <code>describedAs()</code> attribute can also be specified for <a href="#_rgant-CollectionLayout_describedAs">collections</a>, <a href="#_rgant-PropertyLayout_describedAs">properties</a>, <a href="#_rgant-ActionLayout_describedAs">actions</a>, <a href="#_rgant-DomainObjectLayout_describedAs">domain objects</a> and <a href="#_rgant-ViewModelLayout_describedAs">view models</a>.</p> </div> @@ -9188,7 +9321,7 @@ declaration.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_labelPosition">23.3. <code>labelPosition()</code></h3> +<h3 id="_rgant-ParameterLayout_labelPosition">24.3. <code>labelPosition()</code></h3> <div class="paragraph"> <p>The <code>labelPosition()</code> attribute determines the positioning of labels for parameters. This attribute can also be specified for <a href="#_rgant-PropertyLayout_labelPosition">properties</a>.</p> </div> @@ -9228,7 +9361,7 @@ declaration.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_multiLine">23.4. <code>multiLine()</code></h3> +<h3 id="_rgant-ParameterLayout_multiLine">24.4. <code>multiLine()</code></h3> <div class="paragraph"> <p>The <code>multiLine()</code> attribute specifies that the text field for a string parameter should span multiple lines. It is ignored for other parameter types. The attribute is also supported for <a href="#_rgant-PropertyLayout_multiLine">properties</a>.</p> </div> @@ -9266,7 +9399,7 @@ declaration.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_named">23.5. <code>named()</code></h3> +<h3 id="_rgant-ParameterLayout_named">24.5. <code>named()</code></h3> <div class="paragraph"> <p>The <code>named()</code> attribute explicitly specifies the action parameter’s name. This attribute can also be specified for <a href="#_rgant-ActionLayout_named">actions</a>, <a href="#_rgant-CollectionLayout_named">collections</a>, <a href="#_rgant-PropertyLayout_named">properties</a>, <a href="#_rgant-DomainObjectLayout_named">domain objects</a>, <a href="#_rgant-ViewModelLayout_named">view models</a> and <a href="#_rgant-DomainServiceLayout_named">domain services</a>.</p> </div> @@ -9318,7 +9451,7 @@ declaration.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_renderedAsDayBefore">23.6. <code>renderedAsDayBefore()</code></h3> +<h3 id="_rgant-ParameterLayout_renderedAsDayBefore">24.6. <code>renderedAsDayBefore()</code></h3> <div class="paragraph"> <p>The <code>renderedAsDayBefore()</code> attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for <a href="#_rgant-PropertyLayout_renderedAsDayBefore">properties</a>.</p> </div> @@ -9352,7 +9485,7 @@ declaration.</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-ParameterLayout_typicalLength">23.7. <code>typicalLength()</code></h3> +<h3 id="_rgant-ParameterLayout_typicalLength">24.7. <code>typicalLength()</code></h3> <div class="paragraph"> <p>The <code>typicalLength()</code> attribute indicates the typical length of a string parameter. It is ignored for parameters of other types. The attribute is also supported for <a href="#_rgant-PropertyLayout_typicalLength">properties</a>.</p> </div> @@ -9388,7 +9521,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-PersistenceCapable">24. <code>@PersistenceCapable</code> (<code>javax.jdo</code>)</h2> +<h2 id="_rgant-PersistenceCapable">25. <code>@PersistenceCapable</code> (<code>javax.jdo</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.jdo.annotation.PersistenceCapable</code> is used by JDO/DataNucleus to indicate that a class is a domain entity to be persisted to the database.</p> @@ -9523,7 +9656,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-PostConstruct">25. <code>@PostConstruct</code> (<code>javax</code>)</h2> +<h2 id="_rgant-PostConstruct">26. <code>@PostConstruct</code> (<code>javax</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.annotation.PostConstruct</code> annotation, as defined in <a href="https://jcp.org/en/jsr/detail?id=250">JSR-250</a>, is recognized by Apache Isis as a callback method on domain services to be called just after they have been constructed, in order that they initialize themselves.</p> @@ -9626,7 +9759,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-PreDestroy">26. <code>@PreDestroy</code> (<code>javax</code>)</h2> +<h2 id="_rgant-PreDestroy">27. <code>@PreDestroy</code> (<code>javax</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.annotation.PreDestroy</code> annotation, as defined in <a href="https://jcp.org/en/jsr/detail?id=250">JSR-250</a>, recognized by Apache Isis as a callback method on domain services to be called just as they go out of scope.</p> @@ -9699,7 +9832,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-PrimaryKey">27. <code>@PrimaryKey</code> (<code>javax.jdo</code>)</h2> +<h2 id="_rgant-PrimaryKey">28. <code>@PrimaryKey</code> (<code>javax.jdo</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.jdo.annotation.PrimaryKey</code> annotation is used by JDO/DataNucleus to indicate that a property is used as the primary key for an entity with application-managed identity.</p> @@ -9727,7 +9860,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-Programmatic">28. <code>@Programmatic</code></h2> +<h2 id="_rgant-Programmatic">29. <code>@Programmatic</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@Programmatic</code> annotation causes the method to be excluded completely from the Apache Isis metamodel. This means it won’t appear in any UI, and it won’t appear in any <a href="rgsvc.html#_rgsvc_api_MementoService">memento</a>s or <a href="rgsvc.html#_rgsvc_api_XmlSnapshotService">snapshot</a>s.</p> @@ -9753,7 +9886,7 @@ declaration.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-Property">29. <code>@Property</code></h2> +<h2 id="_rgant-Property">30. <code>@Property</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@Property</code> annotation applies to properties collecting together all domain semantics within a single annotation.</p> @@ -9762,7 +9895,7 @@ declaration.</p> <p>It is also possible to apply the annotation to actions of domain services that are acting as <a href="../../more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.html">contributed properties</a>.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 18. <code>@Property</code> attributes</caption> +<caption class="title">Table 19. <code>@Property</code> attributes</caption> <colgroup> <col style="width: 25%;"> <col style="width: 25%;"> @@ -9930,7 +10063,7 @@ so that boilerplate-busting tools such as <a href="https://projectlombok.org/">P </table> </div> <div class="sect2"> -<h3 id="_rgant-Property_domainEvent">29.1. <code>domainEvent()</code></h3> +<h3 id="_rgant-Property_domainEvent">30.1. <code>domainEvent()</code></h3> <div class="paragraph"> <p>Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s properties, the events that are fired are:</p> </div> @@ -10014,7 +10147,7 @@ rather than through the constructor. This substantially reduces the boilerplate </table> </div> <div class="sect3"> -<h4 id="_subscribers_13">29.1.1. Subscribers</h4> +<h4 id="_subscribers_13">30.1.1. Subscribers</h4> <div class="paragraph"> <p>Subscribers (which must be domain services) subscribe using either the <a href="https://github.com/google/guava">Guava</a> API or (if the <a href="rgsvc.html#_rgsvc_api_EventBusService"><code>EventBusService</code></a> has been appropriately configured) using the <a href="http://www.axonframework.org/">Axon Framework</a> API. The examples below use the Guava API.</p> </div> @@ -10114,7 +10247,7 @@ rather than through the constructor. This substantially reduces the boilerplate </div> </div> <div class="sect3"> -<h4 id="_default_doop_and_noop_events_13">29.1.2. Default, Doop and Noop events</h4> +<h4 id="_default_doop_and_noop_events_13">30.1.2. Default, Doop and Noop events</h4> <div class="paragraph"> <p>If the <code>domainEvent</code> attribute is not explicitly specified (is left as its default value, <code>PropertyDomainEvent.Default</code>), then the framework will, by default, post an event.</p> @@ -10134,7 +10267,7 @@ then no event will be posted.</p> </div> </div> <div class="sect3"> -<h4 id="_raising_events_programmatically_6">29.1.3. Raising events programmatically</h4> +<h4 id="_raising_events_programmatically_6">30.1.3. Raising events programmatically</h4> <div class="paragraph"> <p>Normally events are only raised for interactions through the UI. However, events can be raised programmatically by wrapping the target object using the <a href="rgsvc.html#_rgsvc_api_WrapperFactory"><code>WrapperFactory</code></a> service.</p> @@ -10142,7 +10275,7 @@ wrapping the target object using the <a href="rgsvc.html#_rgsvc_api_WrapperFacto </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_editing">29.2. <code>editing()</code></h3> +<h3 id="_rgant-Property_editing">30.2. <code>editing()</code></h3> <div class="paragraph"> <p>The <code>editing()</code> attribute can be used to prevent a property from being modified or cleared, ie to make it read-only. This attribute can also be specified for <a href="#_rgant-Collection_editing">collections</a>, and can also be specified for the <a href="#_rgant-DomainObject_editing">domain object</a>.</p> </div> @@ -10199,7 +10332,7 @@ wrapping the target object using the <a href="rgsvc.html#_rgsvc_api_WrapperFacto </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_fileAccept">29.3. <code>fileAccept()</code></h3> +<h3 id="_rgant-Property_fileAccept">30.3. <code>fileAccept()</code></h3> <div class="paragraph"> <p>The <code>fileAccept()</code> attribute applies only to <a href="rgcms.html#_rgcms_classes_value-types_Blob"><code>Blob</code></a> or <a href="rgcms.html#_rgcms_classes_value-types_Clob"><code>Clob</code></a> parameters, indicating the type of file to accept when @@ -10230,7 +10363,7 @@ uploading a new value. The attribute is also supported on <a href="#_rgant-Par </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_hidden">29.4. <code>hidden()</code></h3> +<h3 id="_rgant-Property_hidden">30.4. <code>hidden()</code></h3> <div class="paragraph"> <p>Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to <a href="#_rgant-ActionLayout_hidden">actions</a> and <a href="#_rgant-CollectionLayout_hidden">collections</a>.</p> </div> @@ -10331,7 +10464,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_maxLength">29.5. <code>maxLength()</code></h3> +<h3 id="_rgant-Property_maxLength">30.5. <code>maxLength()</code></h3> <div class="paragraph"> <p>The <code>maxLength()</code> attribute applies only to <code>String</code> properties, indicating the maximum number of characters that the user may enter (for example in a text field in the UI). The attribute It is ignored if applied to properties of any other type. This attribute can also be applied to <a href="#_rgant-Parameter_maxLength">parameters</a>.</p> </div> @@ -10355,7 +10488,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th <p>In this case there is therefore no need for the <code>@Property#maxLength()</code> attribute.</p> </div> <div class="sect3"> -<h4 id="_non_persistent_properties">29.5.1. Non-persistent properties</h4> +<h4 id="_non_persistent_properties">30.5.1. Non-persistent properties</h4> <div class="paragraph"> <p>Of course, not every property is persistent (it could instead be derived), and neither is every domain object an entity (it could be a view model). For these non persistable properties the <code>maxLength()</code> attribute is still required.</p> </div> @@ -10392,7 +10525,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_mustSatisfy">29.6. <code>mustSatisfy()</code></h3> +<h3 id="_rgant-Property_mustSatisfy">30.6. <code>mustSatisfy()</code></h3> <div class="paragraph"> <p>The <code>mustSatisfy()</code> attribute allows arbitrary validation to be applied to properties using an (implementation of a) <code>org.apache.isis.applib.spec.Specification</code> object. The attribute is also supported on <a href="#_rgant-Parameter_mustSatisfy">parameters</a>.</p> @@ -10467,7 +10600,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_notPersisted">29.7. <code>notPersisted()</code></h3> +<h3 id="_rgant-Property_notPersisted">30.7. <code>notPersisted()</code></h3> <div class="paragraph"> <p>The (somewhat misnamed) <code>notPersisted()</code> attribute indicates that the collection should be excluded from any snapshots generated by the <a href="rgsvc.html#_rgsvc_api_XmlSnapshotService"><code>XmlSnapshotService</code></a>. This attribute is also supported for <a href="#_rgant-Collection_notPersisted">collections</a>.</p> </div> @@ -10540,7 +10673,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_optionality">29.8. <code>optionality()</code></h3> +<h3 id="_rgant-Property_optionality">30.8. <code>optionality()</code></h3> <div class="paragraph"> <p>By default, Apache Isis assumes that all properties of an domain object or view model are required (mandatory). The <code>optionality()</code> attribute allows this to be relaxed. The attribute is also supported for <a href="#_rgant-Parameter_optionality">parameters</a>.</p> </div> @@ -10567,7 +10700,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th <p>In this case there is no need for the <code>@Property#optionality()</code> attribute.</p> </div> <div class="sect3"> -<h4 id="_mismatched_defaults">29.8.1. Mismatched defaults</h4> +<h4 id="_mismatched_defaults">30.8.1. Mismatched defaults</h4> <div class="paragraph"> <p>If the <code>@Column#allowsNull()</code> attribute is omitted and the `@Property#optionality() attribute is also omitted, then note that Isis' defaults and JDO’s defaults differ. Specifically, Isis always assumes properties are mandatory, whereas JDO specifies that primitives are mandatory, but all reference types are optional.</p> </div> @@ -10576,7 +10709,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect3"> -<h4 id="_superclass_inheritance_type">29.8.2. Superclass inheritance type</h4> +<h4 id="_superclass_inheritance_type">30.8.2. Superclass inheritance type</h4> <div class="paragraph"> <p>There is one case (at least) it may be necessary to annotate the property with both <code>@Column#allowsNull</code> and also <code>@Property#optionality()</code>. If the property is logically mandatory and is in a subclass, but the mapping of the class hierarchy is to store both the superclass and subclass(es) into a single table (ie a "roll-up" mapping using <code>javax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLE</code>), then JDO requires that the property is annotated as <code>@Column#allowsNull="true"</code>: its value will be not defined for other subclasses.</p> </div> @@ -10623,7 +10756,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect3"> -<h4 id="_non_persistent_properties_2">29.8.3. Non-persistent properties</h4> +<h4 id="_non_persistent_properties_2">30.8.3. Non-persistent properties</h4> <div class="paragraph"> <p>Of course, not every property is persistent (it could instead be derived), and neither is every domain object an entity (it could be a view model). For these non persistable properties the <code>optionality()</code> attribute is still required.</p> </div> @@ -10710,7 +10843,7 @@ tables. Annotating with <code>@Property(where=Where.NOWHERE)</code> overrides th </div> </div> <div class="sect2"> -<h3 id="_rgant-Property_regexPattern">29.9. <code>regexPattern()</code></h3> +<h3 id="_rgant-Property_regexPattern">30.9. <code>regexPattern()</code></h3> <div class="paragraph"> <p>There are three attributes related to enforcing regular expressions:</p> </div> @@ -10756,7 +10889,7 @@ the provided argument does not match the regex pattern.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-PropertyLayout">30. <code>@PropertyLayout</code></h2> +<h2 id="_rgant-PropertyLayout">31. <code>@PropertyLayout</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@PropertyLayout</code> annotation applies to properties collecting together all UI hints within a single annotation.</p> @@ -10765,7 +10898,7 @@ the provided argument does not match the regex pattern.</p> <p>The table below summarizes the annotation’s attributes.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 19. <code>@PropertyLayout</code> attributes</caption> +<caption class="title">Table 20. <code>@PropertyLayout</code> attributes</caption> <colgroup> <col style="width: 25%;"> <col style="width: 25%;"> @@ -10913,7 +11046,7 @@ so that boilerplate-busting tools such as <a href="https://projectlombok.org/">P </table> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_cssClass">30.1. <code>cssClass()</code></h3> +<h3 id="_rgant-PropertyLayout_cssClass">31.1. <code>cssClass()</code></h3> <div class="paragraph"> <p>The <code>cssClass()</code> attribute can be used to render additional CSS classes in the HTML (a wrapping <code><div></code>) that represents the property. <a href="rgcfg.html#_rgcfg_application-specific_application-css">Application-specific CSS</a> can then be used to target and adjust the UI representation of that particular element.</p> </div> @@ -10944,7 +11077,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_describedAs">30.2. <code>describedAs()</code></h3> +<h3 id="_rgant-PropertyLayout_describedAs">31.2. <code>describedAs()</code></h3> <div class="paragraph"> <p>The <code>describedAs()</code> attribute is used to provide a short description of the property to the user. In the <a href="ugvw.html">Wicket viewer</a> it is displayed as a 'tool tip'. The attribute can also be specified for <a href="#_rgant-CollectionLayout_describedAs">collections</a>, <a href="#_rgant-ActionLayout_describedAs">actions</a>, <a href="#_rgant-ParameterLayout_describedAs">parameters</a>, <a href="#_rgant-DomainObjectLayout_describedAs">domain objects</a> and <a href="#_rgant-ViewModelLayout_describedAs">view models</a>.</p> </div> @@ -10975,7 +11108,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_labelPosition">30.3. <code>labelPosition()</code></h3> +<h3 id="_rgant-PropertyLayout_labelPosition">31.3. <code>labelPosition()</code></h3> <div class="paragraph"> <p>The <code>labelPosition()</code> attribute determines the positioning of labels for properties. This attribute can also be specified for <a href="#_rgant-ParameterLayout_labelPosition">parameters</a>.</p> </div> @@ -11095,7 +11228,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_multiLine">30.4. <code>multiLine()</code></h3> +<h3 id="_rgant-PropertyLayout_multiLine">31.4. <code>multiLine()</code></h3> <div class="paragraph"> <p>The <code>multiLine()</code> attribute specifies that the text field for a string property should span multiple lines. It is ignored for other property types. The attribute is also supported for <a href="#_rgant-ParameterLayout_multiLine">parameters</a>.</p> </div> @@ -11146,7 +11279,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_named">30.5. named()</h3> +<h3 id="_rgant-PropertyLayout_named">31.5. named()</h3> <div class="paragraph"> <p>The <code>named()</code> attribute explicitly specifies the property’s name, overriding the name that would normally be inferred from the Java source code. This attribute can also be specified for <a href="#_rgant-ActionLayout_named">actions</a>, <a href="#_rgant-CollectionLayout_named">collections</a>, <a href="#_rgant-ParameterLayout_named">parameters</a>, <a href="#_rgant-DomainObjectLayout_named">domain objects</a>, <a href="#_rgant-ViewModelLayout_named">view models</a> and <a href="#_rgant-DomainServiceLayout_named">domain services</a>.</p> </div> @@ -11212,7 +11345,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_renderedAsDayBefore">30.6. <code>renderedAsDayBefore()</code></h3> +<h3 id="_rgant-PropertyLayout_renderedAsDayBefore">31.6. <code>renderedAsDayBefore()</code></h3> <div class="paragraph"> <p>The <code>renderedAsDayBefore()</code> attribute applies only to date properties whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for properties of other types. This attribute is also supported for <a href="#_rgant-ParameterLayout_renderedAsDayBefore">parameters</a>.</p> </div> @@ -11257,7 +11390,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect2"> -<h3 id="_rgant-PropertyLayout_typicalLength">30.7. <code>typicalLength()</code></h3> +<h3 id="_rgant-PropertyLayout_typicalLength">31.7. <code>typicalLength()</code></h3> <div class="paragraph"> <p>The <code>typicalLength()</code> attribute indicates the typical length of a string property. It is ignored for properties of other types. The attribute is also supported for <a href="#_rgant-ParameterLayout_typicalLength">parameters</a>.</p> </div> @@ -11282,7 +11415,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-RequestScoped">31. <code>@RequestScoped</code> (<code>javax</code>)</h2> +<h2 id="_rgant-RequestScoped">32. <code>@RequestScoped</code> (<code>javax</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@javax.enterprise.context.RequestScoped</code> <a href="https://jcp.org/en/jsr/detail?id=299">JSR-299</a> CDI annotation is used to specify that a <a href="#_rgant-DomainService">domain service</a> should be request-scoped rather than a singleton.</p> @@ -11356,7 +11489,7 @@ can be used instead, eg:</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-Title">32. <code>@Title</code></h2> +<h2 id="_rgant-Title">33. <code>@Title</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@Title</code> annotation is used to indicate which property or properties make up the object title. If more than one property is used, the order can be specified (using the same Dewey-decimal notation as used by <code>@MemberOrder</code>) and the string to use between the components can also be specified.</p> @@ -11404,7 +11537,7 @@ present in the title column. This convention can be overridden using <code>@Hidden(where=Where.NOWHERE)</code>.</p> </div> <div class="sect2"> -<h3 id="_lombok_support">32.1. Lombok support</h3> +<h3 id="_lombok_support">33.1. Lombok support</h3> <div class="paragraph"> <p>If <a href="dg.html#_dg_ide_project-lombok">Project Lombok</a> is being used, then <code>@Title</code> can be specified on the backing field.</p> </div> @@ -11432,7 +11565,7 @@ present in the title column. This convention can be overridden using </div> </div> <div class="sect1"> -<h2 id="_rgant-ViewModel">33. <code>@ViewModel</code></h2> +<h2 id="_rgant-ViewModel">34. <code>@ViewModel</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@ViewModel</code> annotation, applied to a class, is the simplest way to indicate that the class is a view model.</p> @@ -11492,7 +11625,7 @@ represented in the URL). As such, view models are immutable.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-ViewModelLayout">34. <code>@ViewModelLayout</code></h2> +<h2 id="_rgant-ViewModelLayout">35. <code>@ViewModelLayout</code></h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@ViewModelLayout</code> annotation is identical to the <a href="#_rgant-DomainObjectLayout"><code>@DomainObjectLayout</code></a>, but is provided @@ -11502,7 +11635,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant <p>The table below summarizes the annotation’s attributes.</p> </div> <table class="tableblock frame-all grid-all spread"> -<caption class="title">Table 20. <code>@ViewModel</code> attributes</caption> +<caption class="title">Table 21. <code>@ViewModel</code> attributes</caption> <colgroup> <col style="width: 25%;"> <col style="width: 25%;"> @@ -11608,7 +11741,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </table> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_cssClass">34.1. <code>cssClass()</code></h3> +<h3 id="_rgant-ViewModelLayout_cssClass">35.1. <code>cssClass()</code></h3> <div class="paragraph"> <p>The <code>cssClass()</code> attribute can be used to render additional CSS classes in the HTML (a wrapping <code><div></code>) that represents the view model. <a href="rgcfg.html#_rgcfg_application-specific_application-css">Application-specific CSS</a> can then be used to target and adjust the UI representation of that particular element.</p> </div> @@ -11641,7 +11774,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_cssClassFa">34.2. <code>cssClassFa()</code></h3> +<h3 id="_rgant-ViewModelLayout_cssClassFa">35.2. <code>cssClassFa()</code></h3> <div class="paragraph"> <p>The <code>cssClassFa()</code> attribute is used to specify the name of a <a href="http://fortawesome.github.io/Font-Awesome/icons/">Font Awesome icon</a> name, to be rendered as the domain object’s icon.</p> </div> @@ -11685,7 +11818,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_describedAs">34.3. <code>describedAs()</code></h3> +<h3 id="_rgant-ViewModelLayout_describedAs">35.3. <code>describedAs()</code></h3> <div class="paragraph"> <p>The <code>describedAs()</code> attribute is used to provide a short description of the view model to the user. In the <a href="ugvw.html">Wicket viewer</a> it is displayed as a 'tool tip'. The <code>describedAs()</code> attribute can also be specified for <a href="#_rgant-CollectionLayout_describedAs">collections</a>, <a href="#_rgant-PropertyLayout_describedAs">properties</a>, <a href="#_rgant-ActionLayout_describedAs">actions</a>, <a href="#_rgant-ParameterLayout_describedAs">parameters</a> and <a href="#_rgant-DomainObjectLayout_describedAs">domain objects</a>.</p> </div> @@ -11705,7 +11838,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_named">34.4. <code>named()</code></h3> +<h3 id="_rgant-ViewModelLayout_named">35.4. <code>named()</code></h3> <div class="paragraph"> <p>The <code>named()</code> attribute explicitly specifies the view model’s name, overriding the name that would normally be inferred from the Java source code. This attribute can also be specified for <a href="#_rgant-ActionLayout_named">actions</a>, <a href="#_rgant-CollectionLayout_named">collections</a>, <a href="#_rgant-PropertyLayout_named">properties</a>, <a href="#_rgant-ParameterLayout_named">parameters</a>, <a href="#_rgant-DomainObjectLayout_named">domain objects</a> and <a href="#_rgant-DomainServiceLayout_named">domain services</a>.</p> </div> @@ -11753,7 +11886,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_paged">34.5. <code>paged()</code></h3> +<h3 id="_rgant-ViewModelLayout_paged">35.5. <code>paged()</code></h3> <div class="paragraph"> <p>The <code>paged()</code> attribute specifies the number of rows to display in a standalone collection, as returned from an action invocation. This attribute can also be applied to <a href="#_rgant-CollectionLayout_paged">collections</a> and <a href="#_rgant-DomainObjectLayout_paged">domain objects</a>.</p> </div> @@ -11791,7 +11924,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect2"> -<h3 id="_rgant-ViewModelLayout_plural">34.6. <code>plural()</code></h3> +<h3 id="_rgant-ViewModelLayout_plural">35.6. <code>plural()</code></h3> <div class="paragraph"> <p>When Apache Isis displays a standalone collection of several objects, it will label the collection using the plural form of the object type.</p> </div> @@ -11817,7 +11950,7 @@ for symmetry with domain objects that have been annotated using <a href="#_rgant </div> </div> <div class="sect1"> -<h2 id="_rgant-XmlJavaTypeAdapter">35. <code>@XmlJavaTypeAdapter</code> (<code>jaxb</code>)</h2> +<h2 id="_rgant-XmlJavaTypeAdapter">36. <code>@XmlJavaTypeAdapter</code> (<code>jaxb</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The JAXB <code>@XmlJavaTypeAdapter</code> annotation is used with the framework-provided @@ -11846,7 +11979,7 @@ in the user guide.</p> </div> </div> <div class="sect1"> -<h2 id="_rgant-XmlRootElement">36. <code>@XmlRootElement</code> (<code>jaxb</code>)</h2> +<h2 id="_rgant-XmlRootElement">37. <code>@XmlRootElement</code> (<code>jaxb</code>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <code>@XmlRootElement</code> annotation provides an alternative way to define a @@ -11910,7 +12043,7 @@ implementation (eg which maps XML strings to a GUID, say) can be configured usin </table> </div> <div class="sect2"> -<h3 id="_example">36.1. Example</h3> +<h3 id="_example">37.1. Example</h3> <div class="paragraph"> <p>This example is taken from the (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a>:</p> </div> @@ -11943,7 +12076,7 @@ implementation (eg which maps XML strings to a GUID, say) can be configured usin </div> </div> <div class="sect2"> -<h3 id="_see_also">36.2. See also</h3> +<h3 id="_see_also">37.2. See also</h3> <div class="paragraph"> <p>Although (like any other viewmodel) a JAXB-annotated can have behaviour (actions) and UI hints, you may wish to keep the DTO "clean", just focused on specifying the data contract.</p> @@ -12096,41 +12229,42 @@ in the user guide.</p> <li><a href="#_default_doop_and_noop_events_4">10.6.2. Default, Doop and Noop events</a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_nature">10.7. <code>nature()</code></a></li> -<li><a href="#_rgant-DomainObject_persistedLifecycleEvent">10.8. persistedLifecycleEvent()</a> +<li><a href="#_rgant-DomainObject_mixinMethod">10.7. <code>mixinMethod()</code> (<code>1.13.2-SNAPSHOT</code>)</a></li> +<li><a href="#_rgant-DomainObject_nature">10.8. <code>nature()</code></a></li> +<li><a href="#_rgant-DomainObject_persistedLifecycleEvent">10.9. persistedLifecycleEvent()</a> <ul class="sectlevel3"> -<li><a href="#_subscribers_5">10.8.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_5">10.8.2. Default, Doop and Noop events</a></li> +<li><a href="#_subscribers_5">10.9.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_5">10.9.2. Default, Doop and Noop events</a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_persistingLifecycleEvent">10.9. persistingLifecycleEvent()</a> +<li><a href="#_rgant-DomainObject_persistingLifecycleEvent">10.10. persistingLifecycleEvent()</a> <ul class="sectlevel3"> -<li><a href="#_subscribers_6">10.9.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_6">10.9.2. Default, Doop and Noop events</a></li> +<li><a href="#_subscribers_6">10.10.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_6">10.10.2. Default, Doop and Noop events</a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_objectType">10.10. <code>objectType()</code></a></li> -<li><a href="#_rgant-DomainObject_publishing">10.11. <code>publishing()</code></a> +<li><a href="#_rgant-DomainObject_objectType">10.11. <code>objectType()</code></a></li> +<li><a href="#_rgant-DomainObject_publishing">10.12. <code>publishing()</code></a> <ul class="sectlevel3"> -<li><a href="#__code_publishingpayloadfactory_code_2">10.11.1. <code>publishingPayloadFactory()</code></a></li> +<li><a href="#__code_publishingpayloadfactory_code_2">10.12.1. <code>publishingPayloadFactory()</code></a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_removingLifecycleEvent">10.12. removingLifecycleEvent()</a> +<li><a href="#_rgant-DomainObject_removingLifecycleEvent">10.13. removingLifecycleEvent()</a> <ul class="sectlevel3"> -<li><a href="#_subscribers_7">10.12.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_7">10.12.2. Default, Doop and Noop events</a></li> +<li><a href="#_subscribers_7">10.13.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_7">10.13.2. Default, Doop and Noop events</a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_updatingLifecycleEvent">10.13. updatingLifecycleEvent()</a> +<li><a href="#_rgant-DomainObject_updatingLifecycleEvent">10.14. updatingLifecycleEvent()</a> <ul class="sectlevel3"> -<li><a href="#_subscribers_8">10.13.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_8">10.13.2. Default, Doop and Noop events</a></li> +<li><a href="#_subscribers_8">10.14.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_8">10.14.2. Default, Doop and Noop events</a></li> </ul> </li> -<li><a href="#_rgant-DomainObject_updatedLifecycleEvent">10.14. updatedLifecycleEvent()</a> +<li><a href="#_rgant-DomainObject_updatedLifecycleEvent">10.15. updatedLifecycleEvent()</a> <ul class="sectlevel3"> -<li><a href="#_subscribers_9">10.14.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_9">10.14.2. Default, Doop and Noop events</a></li> +<li><a href="#_subscribers_9">10.15.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_9">10.15.2. Default, Doop and Noop events</a></li> </ul> </li> </ul> @@ -12191,96 +12325,101 @@ in the user guide.</p> </li> <li><a href="#_rgant-MemberGroupLayout">17. <code>@MemberGroupLayout</code></a></li> <li><a href="#_rgant-MemberOrder">18. <code>@MemberOrder</code></a></li> -<li><a href="#_rgant-Nullable">19. <code>@Nullable</code> (<code>javax</code>)</a></li> -<li><a href="#_rgant-NotPersistent">20. <code>@NotPersistent</code> (<code>javax.jdo</code>)</a></li> -<li><a href="#_rgant-MinLength">21. <code>@MinLength</code></a></li> -<li><a href="#_rgant-Parameter">22. <code>@Parameter</code></a> +<li><a href="#_rgant-Mixin">19. <code>@Mixin</code></a> +<ul class="sectlevel2"> +<li><a href="#_rgant-Mixin_method">19.1. <code>method()</code> (<code>1.13.2-SNAPSHOT</code>)</a></li> +</ul> +</li> +<li><a href="#_rgant-Nullable">20. <code>@Nullable</code> (<code>javax</code>)</a></li> +<li><a href="#_rgant-NotPersistent">21. <code>@NotPersistent</code> (<code>javax.jdo</code>)</a></li> +<li><a href="#_rgant-MinLength">22. <code>@MinLength</code></a></li> +<li><a href="#_rgant-Parameter">23. <code>@Parameter</code></a> <ul class="sectlevel2"> -<li><a href="#_rgant-Parameter_fileAccept">22.1. <code>fileAccept()</code></a></li> -<li><a href="#_rgant-Parameter_maxLength">22.2. <code>maxLength()</code></a></li> -<li><a href="#_rgant-Parameter_mustSatisfy">22.3. <code>mustSatisfy()</code></a></li> -<li><a href="#_rgant-Parameter_optionality">22.4. <code>optionality()</code></a></li> -<li><a href="#_rgant-Parameter_regexPattern">22.5. <code>regexPattern()</code></a></li> +<li><a href="#_rgant-Parameter_fileAccept">23.1. <code>fileAccept()</code></a></li> +<li><a href="#_rgant-Parameter_maxLength">23.2. <code>maxLength()</code></a></li> +<li><a href="#_rgant-Parameter_mustSatisfy">23.3. <code>mustSatisfy()</code></a></li> +<li><a href="#_rgant-Parameter_optionality">23.4. <code>optionality()</code></a></li> +<li><a href="#_rgant-Parameter_regexPattern">23.5. <code>regexPattern()</code></a></li> </ul> </li> -<li><a href="#_rgant-ParameterLayout">23. <code>@ParameterLayout</code></a> +<li><a href="#_rgant-ParameterLayout">24. <code>@ParameterLayout</code></a> <ul class="sectlevel2"> -<li><a href="#_rgant-ParameterLayout_cssClass">23.1. <code>cssClass()</code></a></li> -<li><a href="#_rgant-ParameterLayout_describedAs">23.2. <code>describedAs()</code></a></li> -<li><a href="#_rgant-ParameterLayout_labelPosition">23.3. <code>labelPosition()</code></a></li> -<li><a href="#_rgant-ParameterLayout_multiLine">23.4. <code>multiLine()</code></a></li> -<li><a href="#_rgant-ParameterLayout_named">23.5. <code>named()</code></a></li> -<li><a href="#_rgant-ParameterLayout_renderedAsDayBefore">23.6. <code>renderedAsDayBefore()</code></a></li> -<li><a href="#_rgant-ParameterLayout_typicalLength">23.7. <code>typicalLength()</code></a></li> +<li><a href="#_rgant-ParameterLayout_cssClass">24.1. <code>cssClass()</code></a></li> +<li><a href="#_rgant-ParameterLayout_describedAs">24.2. <code>describedAs()</code></a></li> +<li><a href="#_rgant-ParameterLayout_labelPosition">24.3. <code>labelPosition()</code></a></li> +<li><a href="#_rgant-ParameterLayout_multiLine">24.4. <code>multiLine()</code></a></li> +<li><a href="#_rgant-ParameterLayout_named">24.5. <code>named()</code></a></li> +<li><a href="#_rgant-ParameterLayout_renderedAsDayBefore">24.6. <code>renderedAsDayBefore()</code></a></li> +<li><a href="#_rgant-ParameterLayout_typicalLength">24.7. <code>typicalLength()</code></a></li> </ul> </li> -<li><a href="#_rgant-PersistenceCapable">24. <code>@PersistenceCapable</code> (<code>javax.jdo</code>)</a></li> -<li><a href="#_rgant-PostConstruct">25. <code>@PostConstruct</code> (<code>javax</code>)</a></li> -<li><a href="#_rgant-PreDestroy">26. <code>@PreDestroy</code> (<code>javax</code>)</a></li> -<li><a href="#_rgant-PrimaryKey">27. <code>@PrimaryKey</code> (<code>javax.jdo</code>)</a></li> -<li><a href="#_rgant-Programmatic">28. <code>@Programmatic</code></a></li> -<li><a href="#_rgant-Property">29. <code>@Property</code></a> +<li><a href="#_rgant-PersistenceCapable">25. <code>@PersistenceCapable</code> (<code>javax.jdo</code>)</a></li> +<li><a href="#_rgant-PostConstruct">26. <code>@PostConstruct</code> (<code>javax</code>)</a></li> +<li><a href="#_rgant-PreDestroy">27. <code>@PreDestroy</code> (<code>javax</code>)</a></li> +<li><a href="#_rgant-PrimaryKey">28. <code>@PrimaryKey</code> (<code>javax.jdo</code>)</a></li> +<li><a href="#_rgant-Programmatic">29. <code>@Programmatic</code></a></li> +<li><a href="#_rgant-Property">30. <code>@Property</code></a> <ul class="sectlevel2"> -<li><a href="#_rgant-Property_domainEvent">29.1. <code>domainEvent()</code></a> +<li><a href="#_rgant-Property_domainEvent">30.1. <code>domainEvent()</code></a> <ul class="sectlevel3"> -<li><a href="#_subscribers_13">29.1.1. Subscribers</a></li> -<li><a href="#_default_doop_and_noop_events_13">29.1.2. Default, Doop and Noop events</a></li> -<li><a href="#_raising_events_programmatically_6">29.1.3. Raising events programmatically</a></li> +<li><a href="#_subscribers_13">30.1.1. Subscribers</a></li> +<li><a href="#_default_doop_and_noop_events_13">30.1.2. Default, Doop and Noop events</a></li> +<li><a href="#_raising_events_programmatically_6">30.1.3. Raising events programmatically</a></li> </ul> </li> -<li><a href="#_rgant-Property_editing">29.2. <code>editing()</code></a></li> -<li><a href="#_rgant-Property_fileAccept">29.3. <code>fileAccept()</code></a></li> -<li><a href="#_rgant-Property_hidden">29.4. <code>hidden()</code></a></li> -<li><a href="#_rgant-Property_maxLength">29.5. <code>maxLength()</code></a> +<li><a href="#_rgant-Property_editing">30.2. <code>editing()</code></a></li> +<li><a href="#_rgant-Property_fileAccept">30.3. <code>fileAccept()</code></a></li> +<li><a href="#_rgant-Property_hidden">30.4. <code>hidden()</code></a></li> +<li><a href="#_rgant-Property_maxLength">30.5. <code>maxLength()</code></a> <ul class="sectlevel3"> -<li><a href="#_non_persistent_properties">29.5.1. Non-persistent properties</a></li> +<li><a href="#_non_persistent_properties">30.5.1. Non-persistent properties</a></li> </ul> </li> -<li><a href="#_rgant-Property_mustSatisfy">29.6. <code>mustSatisfy()</code></a></li> -<li><a href="#_rgant-Property_notPersisted">29.7. <code>notPersisted()</code></a></li> -<li><a href="#_rgant-Property_optionality">29.8. <code>optionality()</code></a> +<li><a href="#_rgant-Property_mustSatisfy">30.6. <code>mustSatisfy()</code></a></li> +<li><a href="#_rgant-Property_notPersisted">30.7. <code>notPersisted()</code></a></li> +<li><a href="#_rgant-Property_optionality">30.8. <code>optionality()</code></a> <ul class="sectlevel3"> -<li><a href="#_mismatched_defaults">29.8.1. Mismatched defaults</a></li> -<li><a href="#_superclass_inheritance_type">29.8.2. Superclass inheritance type</a></li> -<li><a href="#_non_persistent_properties_2">29.8.3. Non-persistent properties</a></li> +<li><a href="#_mismatched_defaults">30.8.1. Mismatched defaults</a></li> +<li><a href="#_superclass_inheritance_type">30.8.2. Superclass inheritance type</a></li> +<li><a href="#_non_persistent_properties_2">30.8.3. Non-persistent properties</a></li> </ul> </li> -<li><a href="#_rgant-Property_regexPattern">29.9. <code>regexPattern()</code></a></li> +<li><a href="#_rgant-Property_regexPattern">30.9. <code>regexPattern()</code></a></li> </ul> </li> -<li><a href="#_rgant-PropertyLayout">30. <code>@PropertyLayout</code></a> +<li><a href="#_rgant-PropertyLayout">31. <code>@PropertyLayout</code></a> <ul class="sectlevel2"> -<li><a href="#_rgant-PropertyLayout_cssClass">30.1. <code>cssClass()</code></a></li> -<li><a href="#_rgant-PropertyLayout_describedAs">30.2. <code>describedAs()</code></a></li> -<li><a href="#_rgant-PropertyLayout_labelPosition">30.3. <code>labelPosition()</code></a></li> -<li><a href="#_rgant-PropertyLayout_multiLine">30.4. <code>multiLine()</code></a></li> -<li><a href="#_rgant-PropertyLayout_named">30.5. named()</a></li> -<li><a href="#_rgant-PropertyLayout_renderedAsDayBefore">30.6. <code>renderedAsDayBefore()</code></a></li> -<li><a href="#_rgant-PropertyLayout_typicalLength">30.7. <code>typicalLength()</code></a></li> +<li><a href="#_rgant-PropertyLayout_cssClass">31.1. <code>cssClass()</code></a></li> +<li><a href="#_rgant-PropertyLayout_describedAs">31.2. <code>describedAs()</code></a></li> +<li><a href="#_rgant-PropertyLayout_labelPosition">31.3. <code>labelPosition()</code></a></li> +<li><a href="#_rgant-PropertyLayout_multiLine">31.4. <code>multiLine()</code></a></li> +<li><a href="#_rgant-PropertyLayout_named">31.5. named()</a></li> +<li><a href="#_rgant-PropertyLayout_renderedAsDayBefore">31.6. <code>renderedAsDayBefore()</code></a></li> +<li><a href="#_rgant-PropertyLayout_typicalLength">31.7. <code>typicalLength()</code></a></li> </ul> </li> -<li><a href="#_rgant-RequestScoped">31. <code>@RequestScoped</code> (<code>javax</code>)</a></li> -<li><a href="#_rgant-Title">32. <code>@Title</code></a> +<li><a href="#_rgant-RequestScoped">32. <code>@RequestScoped</code> (<code>javax</code>)</a></li> +<li><a href="#_rgant-Title">33. <code>@Title</code></a> <ul class="sectlevel2"> -<li><a href="#_lombok_support">32.1. Lombok support</a></li> +<li><a href="#_lombok_support">33.1. Lombok support</a></li> </ul> </li> -<li><a href="#_rgant-ViewModel">33. <code>@ViewModel</code></a></li> -<li><a href="#_rgant-ViewModelLayout">34. <code>@ViewModelLayout</code></a> +<li><a href="#_rgant-ViewModel">34. <code>@ViewModel</code></a></li> +<li><a href="#_rgant-ViewModelLayout">35. <code>@ViewModelLayout</code></a> <ul class="sectlevel2"> -<li><a href="#_rgant-ViewModelLayout_cssClass">34.1. <code>cssClass()</code></a></li> -<li><a href="#_rgant-ViewModelLayout_cssClassFa">34.2. <code>cssClassFa()</code></a></li> -<li><a href="#_rgant-ViewModelLayout_describedAs">34.3. <code>describedAs()</code></a></li> -<li><a href="#_rgant-ViewModelLayout_named">34.4. <code>named()</code></a></li> -<li><a href="#_rgant-ViewModelLayout_paged">34.5. <code>paged()</code></a></li> -<li><a href="#_rgant-ViewModelLayout_plural">34.6. <code>plural()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_cssClass">35.1. <code>cssClass()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_cssClassFa">35.2. <code>cssClassFa()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_describedAs">35.3. <code>describedAs()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_named">35.4. <code>named()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_paged">35.5. <code>paged()</code></a></li> +<li><a href="#_rgant-ViewModelLayout_plural">35.6. <code>plural()</code></a></li> </ul> </li> -<li><a href="#_rgant-XmlJavaTypeAdapter">35. <code>@XmlJavaTypeAdapter</code> (<code>jaxb</code>)</a></li> -<li><a href="#_rgant-XmlRootElement">36. <code>@XmlRootElement</code> (<code>jaxb</code>)</a> +<li><a href="#_rgant-XmlJavaTypeAdapter">36. <code>@XmlJavaTypeAdapter</code> (<code>jaxb</code>)</a></li> +<li><a href="#_rgant-XmlRootElement">37. <code>@XmlRootElement</code> (<code>jaxb</code>)</a> <ul class="sectlevel2"> -<li><a href="#_example">36.1. Example</a></li> -<li><a href="#_see_also">36.2. See also</a></li> +<li><a href="#_example">37.1. Example</a></li> +<li><a href="#_see_also">37.2. See also</a></li> </ul> </li> </ul>