| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Copyright 2005 The Apache Software Foundation |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <document> |
| <properties> |
| <title>Tapestry Annotations</title> |
| </properties> |
| <body> |
| |
| |
| <section name="Tapestry Annotations"> |
| <p> |
| This library does not contain components; instead it provides Tapestry specific |
| <em>annotations</em> |
| (annotations are a a |
| <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html"> |
| new feature in JDK 1.5 |
| </a> |
| ). These annotations allow you to perform some operations inside Java code that |
| otherwise would be specified in the page or component specification. This is very |
| useful when using inheritance, because base classes can provide annotations that are |
| inherited by subclasses. |
| </p> |
| |
| <p>The annotations are all in the package org.apache.tapestry.annotations.</p> |
| |
| <p> |
| Remember that a single method should only have, at most, one of these annotations! |
| Having multiple annotations, or conflicts between method annotations and directives |
| in the specification, will result in runtime exceptions. In addition, annotations |
| don't provide the kind of line precise location data that the XML specifications or |
| the templates do (but most exceptions will clearly identify the class and method, |
| which should be sufficient). |
| </p> |
| |
| <subsection name="Asset"> |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Asset.html">Asset</a> |
| annotation is the equivalent of the |
| <a href="../usersguide/spec.html#<asset> element"><asset></a> |
| element in a specification. The value attribute is the path to the asset |
| (possibly prefixed to indicate the domain for the path): |
| </p> |
| |
| <source xml:space="preserve"> |
| @Asset("/style/global.css") |
| public abstract IAsset getGlobalStylesheet(); |
| </source> |
| |
| <p> |
| The asset will be available using the property name using the "asset:" binding |
| prefix. |
| </p> |
| |
| |
| </subsection> |
| |
| |
| <subsection name="Bean"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Bean.html">Bean</a> |
| annotation is the equivalent of the |
| <a href="../usersguide/spec.html#<bean> element"><bean></a> |
| element in a specification. |
| </p> |
| |
| <p> |
| The property type will be used as the Java class to instantiate for the bean; |
| alternately, the value attribute may be specified (this is useful when, for |
| example, the property type is an interface). |
| </p> |
| |
| <p>The examples below both define a bean of type HashMap:</p> |
| |
| <source xml:space="preserve"> |
| @Bean |
| public abstract HashMap getHashMapBean(); |
| |
| @Bean(HashMap.class) |
| public abstract Map getMapBean(); |
| </source> |
| |
| <p> |
| A bean defined this way will be stored into the component's beans property, |
| exactly as if specified using XML; its name will be the property name. |
| </p> |
| |
| <p> |
| An additional attribute, lifecycle, controls the bean's lifecycle. The default |
| is |
| <a href="apidocs/org/apache/tapestry/annotations/Lifecycle.html">Lifecycle</a> |
| .REQUEST, and additional values are NONE, PAGE, and RENDER: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Bean(lifecycle = Lifecycle.RENDER) |
| public abstract Map getRenderLifecycleBean(); |
| </source> |
| |
| <p> |
| Lastly, for |
| <em>simple</em> |
| configuration of the bean, there's the initializer attribute. This allows |
| <em>lightweight initialization</em> |
| , where the string is a series of name=value properties, seperated by commas |
| (for boolean properties, the value is optional). |
| </p> |
| |
| <source xml:space="preserve"> |
| @Bean(initializer = "maxRetries=3") |
| public abstract LoginController getController(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="Component"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Component.html">Component</a> |
| annotation is attached to an accessor method and allows a component type to be |
| defined in place, as with the |
| <a href="../usersguide/spec.html#<component> element"><component></a> |
| element. |
| </p> |
| |
| <p> |
| By default, the component type will match the return type |
| and the component id will match the property name: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Component |
| public abstract TextField getEmail(); |
| </source> |
| |
| <p>When component type and return type differ, |
| then the type attibute should be specified:</p> |
| |
| <source xml:space="preserve"> |
| @Component(type = "contrib:Table") |
| public abstract Table getResultsTable(); |
| </source> |
| |
| <p>Additionally, when component id and property name differ, |
| then the id attibute can be specified:</p> |
| |
| |
| <source xml:space="preserve"> |
| @Component(id = "email") |
| public abstract TextField getEmailField(); |
| </source> |
| |
| <p> |
| Component bindings are specified with an array of strings. The individual |
| strings identify the parameter name and the binding reference: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Component(type = "Conditional", bindings = |
| { "condition=message", "element=div" }) |
| public abstract IComponent getIfMessage(); |
| </source> |
| |
| <p> |
| Component copies can be created by specifying the copyOf attribute. It should |
| contain the name of another defined component. The type and bindings of |
| that component will be copied to this component. The following code creates |
| a copy of the previous component: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Component(copyOf = "ifMessage") |
| public abstract IComponent getIfMessageCopy(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="ComponentClass"> |
| |
| |
| <p> |
| |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/ComponentClass.html"> |
| ComponentClass |
| </a> |
| annotation is used to mark a Java class as a component, and allows several |
| properties normally specified using the |
| <a href="../usersguide/spec.html#<component-specification> element"> |
| <component-specification></a> element. |
| </p> |
| |
| <source xml:space="preserve"> |
| @ComponentClass |
| public abstract class MyComponent extends BaseComponent |
| { |
| ... |
| </source> |
| |
| <p> |
| The defaults for allowBody and allowInformalParameters are true; components may |
| override: |
| </p> |
| |
| <source xml:space="preserve"> |
| @ComponentClass(allowBody = false, allowInformalParameters = false) |
| { |
| ... |
| </source> |
| |
| <p> |
| Note that simply having a @ComponentClass annotation will |
| <em>override</em> |
| those two properties. |
| </p> |
| |
| <p>If a component has reserved parameters, they can be specified as well:</p> |
| |
| <source xml:space="preserve"> |
| @ComponentClass(reservedParameters = "href,name") |
| public abstract class LinkWriter extends BaseComponent |
| { |
| ... |
| </source> |
| |
| <p> |
| Finally, the presence of the @Deprecated annotation will mark the component as |
| deprecated (and cause a warning to be output whenever the component is |
| referenced): |
| </p> |
| |
| <source xml:space="preserve"> |
| @ComponentClass @Deprecated |
| public abstact class YeOldeComponent extends AbstractComponent |
| { |
| ... |
| </source> |
| |
| |
| </subsection> |
| |
| <subsection name="EventListener"> |
| |
| |
| <p> |
| The |
| <a |
| href="../tapestry-annotations/apidocs/org/apache/tapestry/annotations/EventListener.html"> |
| EventListener |
| </a> |
| annotation is attached to |
| <a href="../tapestry-framework/apidocs/org/apache/tapestry/IActionListener"> |
| listener |
| </a> |
| methods to dynamically bind and listen to client side browser events. |
| </p> |
| |
| <p> |
| This annotation is capable of a variety of tasks, but most of them are centered |
| around the |
| <a href="http://dojotoolkit.org">dojo</a> |
| javascript toolkit event API for binding and listening to javascript events in |
| an AOP fashion. |
| </p> |
| |
| <p> |
| As an example, this page form listener method will be called when the component |
| with id "projectChoose" has it's javascript functional equivalent |
| <code>selectOption</code> |
| function called: |
| </p> |
| |
| <source xml:space="preserve"> |
| @EventListener(events = "onValueChanged", targets = "projectChoose") |
| public void projectSelected(IRequestCycle cycle) |
| { |
| cycle.getResponseBuilder().updateComponent("projectDescription"); |
| cycle.getResponseBuilder().updateComponent("feedbackBlock"); |
| } |
| </source> |
| |
| <subsection name="Parameters"> |
| |
| <table> |
| |
| <tr> |
| <th>Name</th> |
| <th>Type</th> |
| <th>Required</th> |
| <th>Default</th> |
| <th>Description</th> |
| </tr> |
| <tr> |
| <td>targets</td> |
| <td>String[],String</td> |
| <td>no</td> |
| <td> </td> |
| <td> |
| Specifies the components/widgets to listen to events on, in the form of unique |
| component ids. One of either elements OR targets must be supplied. This is supposed to |
| be the id as returned by <code>IComponent.getClientId()</code>. |
| </td> |
| </tr> |
| <tr> |
| <td>elements</td> |
| <td>String[],String</td> |
| <td>no</td> |
| <td> </td> |
| <td> |
| Specifies the unique html element dom node ID's to listen to events on. One of |
| either elements OR targets must be supplied. |
| </td> |
| </tr> |
| <tr> |
| <td>events</td> |
| <td>String[],String</td> |
| <td>yes</td> |
| <td> </td> |
| <td> |
| Specifies which javascript "events" to listen for. Just as with the dojo api, these |
| events can be simple things like <code>onclick</code> or <code>onsubmit</code>, but can |
| also be bound to specific functions if they exist on the component/widget you are targeting. |
| |
| <br/><br /> |
| For example, the Autocomplete component wraps a dojo ComboBox widget that has a function named |
| <code>onValueChanged</code> that is called when an item in the list is selected. |
| </td> |
| </tr> |
| <tr> |
| <td>submitForm</td> |
| <td>String</td> |
| <td>no</td> |
| <td> </td> |
| <td> |
| If specified, the form matching the passed in form ID will be submitted before calling your |
| listener method. |
| |
| <span class="info"> |
| <strong>Information:</strong> |
| <p> |
| In almost all instances you will <i>not</i> want to use this parameter as any component |
| target implementing IFormComponent will automatically submit the form containing it for you. This |
| only needs to be used in the rare instance where you want to submit a different form. |
| </p> |
| </span> |
| </td> |
| </tr> |
| <tr> |
| <td>validateForm</td> |
| <td>boolean</td> |
| <td>no</td> |
| <td>false</td> |
| <td> |
| When targeting a component implementing IFormComponent, optionally enables/disables |
| both client side validation <em>and</em> server side validation when the form is submitted. |
| </td> |
| </tr> |
| <tr> |
| <td>async</td> |
| <td>boolean</td> |
| <td>no</td> |
| <td>true</td> |
| <td> |
| When components implementing IFormComponent are targeted and will cause a form submission this parameter |
| can additionally be used to cause the submission to happen with or without asynchronous (ajax) IO calls. |
| </td> |
| </tr> |
| <tr> |
| <td>autoSubmit</td> |
| <td>boolean</td> |
| <td>no</td> |
| <td>true</td> |
| <td> |
| When components implementing IFormComponent are targeted they will normally automatically cause a form |
| submission to happen so that the property they manage on your form is updated when your listener method |
| is called - this parameter can be used to disable the automatic submission of the enclosing form. |
| |
| <span class="warn"> |
| <strong>Warning:</strong> |
| <p> |
| Use at your own risk, this is no guarantee what kind of state your properties will be in when this method |
| is invoked. If you aren't relying on form specific properties to do things everything should be fine - just be careful. |
| </p> |
| </span> |
| </td> |
| </tr> |
| <tr> |
| <td>focus</td> |
| <td>boolean</td> |
| <td>no</td> |
| <td>false</td> |
| <td> |
| When components implementing IFormComponent are targeted and will cause a form submission this parameter |
| can additionally be used to turn on/off the normal client side form element focusing that normally happens in |
| Tapestry forms to focus the most important / first field in error. This can be annoying on AJAX IO calls and so is turned |
| off by default. |
| </td> |
| </tr> |
| </table> |
| </subsection> |
| |
| <subsection name="Listener Parameters"> |
| Many people have asked about the possibility of specifying a list of parameters to pass in to the listener method like you would |
| do with a <a href="../components/link/directlink.html">DirectLink</a> component. We are aware of this and hope to get it implemented |
| sometime in one of the upcoming Tapestry 4.X releases. |
| </subsection> |
| |
| </subsection> |
| |
| <subsection name="InitialValue"> |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InitialValue.html"> |
| InitialValue |
| </a> |
| annotation allows a default value to be specified for a property. The property |
| may also be persistent (via the |
| <a href="#Persist">@Persist</a> |
| annotation). |
| </p> |
| |
| <p> |
| The value is a binding reference; the reference will be evaluated when the page |
| is first loaded, and again when the page is detached and returned to the page |
| pool. The default binding prefix is "ognl:". |
| </p> |
| |
| <p>The annotation is attached to an accessor method:</p> |
| |
| <source xml:space="preserve"> |
| @InitialValue("request.serverName") |
| public abstract String getServerName(); |
| </source> |
| |
| |
| <p> |
| In many cases, where the initial value is a constant, a better approach is to |
| set the initial value from the component's finishLoad() method. |
| </p> |
| |
| |
| <source xml:space="preserve"> |
| public abstract int getMaxAttempts(); |
| |
| public abstract void setMaxAttempts(int maxAttempts); |
| |
| protected void finishLoad() |
| { |
| setMaxAttempts(5); |
| } |
| </source> |
| |
| |
| </subsection> |
| |
| <subsection name="InjectAsset"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectAsset.html"> |
| InjectAsset |
| </a> |
| annotation allows assets defined in the page or component specification to be |
| exposed as read-only properties. It is attached to an accessor method: |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectAsset("stylesheet") |
| public abstract IAsset getStylesheet(); |
| </source> |
| |
| <p> |
| This is equivalent to specifying the property attribute of the |
| <a href="../usersguide/spec.html#<asset> element"><asset></a> |
| element. |
| </p> |
| |
| </subsection> |
| |
| <subsection name="InjectComponent"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectComponent.html"> |
| InjectComponent |
| </a> |
| annotation allows nested components to be injected as read-only properties. It |
| is attached to an accessor method: |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectComponent("inputUserName") |
| public abstract TextField getUserInput(); |
| </source> |
| |
| <p> |
| This is functionally the same as providing the property attribute of the |
| <a href="../usersguide/spec.html#<component> element"><component></a> |
| element. |
| </p> |
| |
| </subsection> |
| |
| <subsection name="InjectMeta"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectMeta.html">InjectMeta</a> |
| annotation allows meta data from the specification ( |
| <a href="../usersguide/spec.html#<meta> element"><meta> elements</a> ) |
| to be exposed as properties. |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectMeta("page-title") |
| public abstract String getPageTitle(); |
| </source> |
| |
| <p> |
| The new property does not have to be type String; an automatic type conversion |
| takes place. |
| </p> |
| |
| <p> |
| The <a href="apidocs/org/apache/tapestry/annotations/InjectMeta.html">InjectMeta</a> |
| annotation can also be used alone - the method name is converted into a property |
| key using the rules described at the <a href="#Message">Message</a> annotation. |
| Here's an equivalent to the previous example. |
| </p> |
| <source xml:space="preserve"> |
| @InjectMeta |
| public abstract String getPageTitle(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="InjectObject"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectObject.html"> |
| InjectObject |
| </a> |
| annotation allows HiveMind objects to be injected. It is attached to an accessor |
| method: |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectObject("infrastructure:request") |
| public abstract WebRequest getRequest(); |
| </source> |
| |
| <p> |
| The end result is the same as using the |
| <a href="../usersguide/spec.html#<inject> element"><inject></a> |
| element, with the default type of "object". |
| </p> |
| |
| </subsection> |
| |
| <subsection name="InjectPage"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectPage.html">InjectPage</a> |
| annotation allows a page to be injected into another page or component. It is |
| attached to an accessor method: |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectPage("Details") |
| public abstract Details getDetailsPage(); |
| </source> |
| |
| <p>Injecting other pages is most commonly used as part of a listener method.</p> |
| |
| </subsection> |
| |
| <subsection name="InjectScript"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectScript.html"> |
| InjectScript |
| </a> |
| annotation allows JavaScript templates to be exposed as properties. The |
| annotation's value is the path to the script (relative to the page or component |
| specification, if it exists, or relative to the template otherwise). |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectScript("scripts/VerifyAccountId.script") |
| public abstract IScript getVerifyAccountIdScript(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="InjectState"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectState.html"> |
| InjectState |
| </a> |
| annotation allows an Application State Object to be injected and a read/write |
| property. It is attached to an accessor method: |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectState("visit") |
| public abstract MyAppVisit getVisit(); |
| </source> |
| |
| <p> |
| The end result is equivalent to using the |
| <a href="../usersguide/spec.html#<inject> element"><inject></a> |
| element, with a type of "state". |
| </p> |
| |
| <p> |
| The <a href="apidocs/org/apache/tapestry/annotations/InjectState.html">InjectState</a> |
| annotation can also be used alone - the method name is converted into a |
| key using the rules described at the <a href="#Message">Message</a> annotation. |
| Here's an equivalent to the previous example. |
| </p> |
| <source xml:space="preserve"> |
| @InjectState |
| public abstract MyAppVisit getVisit(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="InjectStateFlag"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/InjectStateFlag.html"> |
| InjectStateFlag |
| </a> |
| annotation implements a read-only boolean property that returns true if the |
| identified application state object exists. This is useful for avoiding the |
| accidental creation of the ASO, which helps avoid the unneccessary creation of |
| the HttpSession. |
| </p> |
| |
| <source xml:space="preserve"> |
| @InjectStateFlag("visit") |
| public abstract boolean getVisitExists(); |
| </source> |
| |
| <p> |
| The end result is equivalent to using the |
| <a href="../usersguide/spec.html#<inject> element"><inject></a> |
| element, with a type of "state-flag". |
| </p> |
| |
| <p> |
| The <a href="apidocs/org/apache/tapestry/annotations/InjectStateFlag.html"> |
| InjectStateFlag |
| </a> |
| annotation can also be used alone - the method name is converted into a |
| key using the rules described at the <a href="#Message">Message</a> annotation |
| ( with the addition that any trailing "exists" is stripped ). |
| Here's an equivalent to the previous example. |
| It also injects the flag for the visit ASO. |
| </p> |
| <source xml:space="preserve"> |
| @InjectStateFlag |
| public abstract boolean getVisitExists(); |
| </source> |
| |
| </subsection> |
| |
| <subsection name="Message"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Message.html">Message</a> |
| annotation provides easy access to localized messages. It is attached to a |
| method that returns a String, and takes any number of parameters. In its most |
| basic form, it is used alone: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Message |
| public abstract String getPageTitle(); |
| </source> |
| |
| <p> |
| As used here, the method name is converted into a message property key: |
| <code>page-title</code> |
| : |
| </p> |
| |
| <ul> |
| <li>The prefix "get" is stripped off (if present)</li> |
| <li>The letter following "get" is converted to lower case</li> |
| <li> |
| Other capitalized letters are converted to lower case and preceded with a |
| dash ("-") |
| </li> |
| </ul> |
| |
| <p>The end result is equivalent to:</p> |
| |
| <source xml:space="preserve"> |
| public String getPageTitle() |
| { |
| return getMessages().getMessage("page-title"); |
| } |
| </source> |
| |
| <p> |
| When these method-name to property key conversion rules don't yield the correct |
| key, it may be specified explicitly: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Message("get-a-life") |
| public abstract String getALife(); |
| </source> |
| |
| <p> |
| The method may take parameters as well; these parameter will be converted into |
| message arguments, which can be referenced inside the message as {0}, {1}, etc. |
| </p> |
| |
| <source xml:space="preserve"> |
| @Message |
| public abstract String getLineTotal(BigDecimal total); |
| </source> |
| |
| <p>This is equivalent to:</p> |
| |
| <source xml:space="preserve"> |
| public String getLineTotal(BigDecimal total) |
| { |
| return getMessages().format("line-total", new Object[] { total }); |
| } |
| </source> |
| |
| <p> |
| Primitive types passed in as parameters are automatically converted to wrapper |
| types. |
| </p> |
| </subsection> |
| |
| <subsection name="Meta"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Meta.html">Meta</a> |
| annotation is used to define a meta data value on a page or component class, as |
| with the |
| <a href="../usersguide/spec.html#<meta> element"><meta></a> |
| element in an XML component or page specification. |
| </p> |
| |
| <p> |
| Meta data from base classes is merged into subclasses; when there's a name |
| conflict, the subclass overrides the base class. This allows a base class to set |
| a default that can be naturally overriden in a subclass. |
| </p> |
| |
| <source xml:space="preserve"> |
| @Meta({ "requires-login=false", "show-ad-banner=true" }) |
| public abstract class AppBasePage extends BasePage |
| { |
| ... |
| </source> |
| |
| <p> |
| Subclasses of AppBasePage could provide a @Meta annotatioun that defines new |
| meta data, or overrides either of these values. |
| </p> |
| |
| <p> |
| Often, you only want to define a single meta value; the compiler allows you to |
| omit the curly braces for this case: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Meta("org.apache.tapestry.jwcid-attribute-name=id") |
| public abstract class MyComponent extends BaseComponent |
| { |
| ... |
| </source> |
| </subsection> |
| |
| <subsection name="Parameter"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Parameter.html">Parameter</a> |
| annotation defines a new property, as with |
| <a href="../usersguide/spec.html#<parameter> element"><parameter></a> |
| element in an XML component specification. |
| </p> |
| |
| <p> |
| This most simple use of this annotation is to simply mark a property as an |
| optional parameter: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Parameter |
| public abstract void MyType getMyParameter(); |
| </source> |
| |
| <p> |
| The parameter name will generally match the property name (as determined from |
| the method to which the annotation is attached). This can be overriden with the |
| name attribute: |
| </p> |
| |
| <source xml:space="preserve"> |
| @Parameter(name = "page") |
| public abstract String getTargetPage(); |
| </source> |
| |
| <p> |
| Parameters may be marked as deprecated if the method is marked deprecated (using |
| the java.lang.Deprecated annotation): |
| </p> |
| |
| <source xml:space="preserve"> |
| @Deprecated @Parameter |
| public abstract int getRows(); |
| </source> |
| |
| <p> |
| The annotation supports several additional attributes, consult its |
| <a href="apidocs/org/apache/tapestry/annotations/Parameter.html">JavaDoc</a> |
| for the full details. |
| </p> |
| |
| </subsection> |
| |
| <subsection name="Persist"> |
| |
| |
| <p> |
| The |
| <a href="apidocs/org/apache/tapestry/annotations/Persist.html">Persist</a> |
| annotation allows a property to be marked as persistent. Remember that any |
| otherwise unclaimed abstract property will become a |
| <em>transient</em> |
| property automatically (in Tapestry 4.0), so Persist is only needed to mark a |
| property as persistent. |
| </p> |
| |
| <p>The value of the Persist annotation defaults to "session":</p> |
| |
| <source xml:space="preserve"> |
| @Persist |
| public abstract int getSessionPersistentProperty(); |
| |
| @Persist("client") |
| public abstract double getClientPersistentProperty(); |
| </source> |
| |
| <p> |
| This annotation works exactly like a |
| <a href="../usersguide/spec.html#<property> element"><property></a> |
| element, except that the initial-value attribute can't be specified. Use the |
| <a href="#InitialValue">@InitialValue</a> |
| annotation to set the property's initial value. |
| </p> |
| |
| </subsection> |
| |
| </section> |
| |
| </body> |
| </document> |