Author: mindbridge
Date: Sun Oct 23 03:43:32 2005
New Revision: 327773

URL: http://svn.apache.org/viewcvs?rev=327773&view=rev
Log:
Adding a Hints section to the For documentation

Modified:
    
jakarta/tapestry/trunk/framework/src/documentation/content/xdocs/tapestry/ComponentReference/For.xml

Modified: 
jakarta/tapestry/trunk/framework/src/documentation/content/xdocs/tapestry/ComponentReference/For.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/documentation/content/xdocs/tapestry/ComponentReference/For.xml?rev=327773&r1=327772&r2=327773&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/documentation/content/xdocs/tapestry/ComponentReference/For.xml
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/documentation/content/xdocs/tapestry/ComponentReference/For.xml
 Sun Oct 23 03:43:32 2005
@@ -32,7 +32,7 @@
   Loops over a collection of source values.  May also emulate an element (like 
an Any
   component). If this component is placed in a Form, it will automatically 
store
   the collection in Hidden fields so that the structure of the page is 
preserved
-  during a rewind even if the values in the source change.
+  when the form is submitted even if the values in the source parameter have 
changed.
 </p>
 
 <p>
@@ -250,7 +250,7 @@
   <p><br/><strong>Edit a list of customers</strong></p>
   <p>This examples allows the user to edit a list of customers.
      The 'keyExpression' parameter is optional. It tells the component to use 
the 'id'
-     expression to obtain the primary key of the customer. 
+     expression to obtain the primary key of the customers. 
      The parameter is particularly useful when the Customer object is not 
Serializable,
      as only the primary key is stored in the hidden fields, 
      rather than the full Customer record.
@@ -266,7 +266,8 @@
   <tr>
     <td colspan="3"><hr></td>
   </tr>
-  <tr jwcid="@For" source="ognl:customerList" keyExpression="id" 
value="ognl:customer" element="tr">
+  <tr jwcid="@For" source="ognl:customerList" keyExpression="id"
+      value="ognl:customer" element="tr">
     <td><span jwcid="@Insert" value="ognl:customer.id"/></td>
     <td><span jwcid="@TextField" value="ognl:customer.fullName"/></td>
     <td><span jwcid="@PropertySelection" value="ognl:customer.memberLevel"
@@ -274,8 +275,70 @@
   </tr>
 </table>]]>
 </source>
-      
-  
+     
+</section>
+
+<section>
+  <title>Hints</title>
+
+  <p><strong>Representing data as a string</strong></p>
+  <p>If the &For; component is used in a form, it will automatically 
+        convert the provided data to strings and store it in hidden fields 
+     in order to ensure that the form is processed correctly 
+     when submitted. 
+  </p>
+  <p>
+        If the data is in one of the basic types or if the data is 
serializable, 
+     Tapestry will automatically build string representation of the objects.
+        If it is not serializable however, an 
<code>ApplicationRuntimeException</code> 
+        will be thrown with the message 'Could not find a strategy instance 
for class'.
+  </p>
+  <p>
+        There are several options to resolve this problem:
+  </p>
+        <ol>
+               <li>
+                       <p>
+                       <strong>Store only the primary keys of your data 
objects</strong> 
+                       <br/>
+                       You can define the name of a property that contains the 
primary keys 
+                       using the <code>keyExpression</code> parameter. 
+                       <br/>
+                       The second example shows that approach and uses the 
<code>id</code>
+                       property to represent the object. 
+                       <br/>
+                       Alternatively, you can implement the 
<code>IPrimaryKeyConverter</code> 
+                       interface and use the <code>converter</code> parameter 
to define how
+                       the primary key is obtained from the object.
+                       </p>
+               </li>
+               <li>
+                       <strong>Make your data class Serializable.</strong> 
+                       <br/>
+                       Tapestry will automatically convert Serializable data 
into a string 
+                       and store it in the form. 
+               </li>
+               <li>
+                       Define your own way to convert the class into a string. 
 
+                       To do this, implement the <code>SqueezeAdaptor</code> 
interface 
+                       and register your squeeze adaptor in the 
WEB-INF/hivemodule.xml file. 
+                       Please refer to the documentation for more information.
+               </li>
+               <li>
+                       Make the For component volatile by setting the 
<code>volatile</code> parameter 
+                       to 'true'. 
+                       This approach is discouraged, since the data will not 
be stored in the form 
+                       as a result. That may cause a 
<code>StaleLinkException</code> to be thrown 
+                       if the data changes between the form rendering and the 
form submission. 
+                       To avoid this problem you must make sure that the data 
stays the same.
+               </li>
+        </ol>
+  <p>
+        Either of the above options will work, but the first two are preferred.
+  </p>
+
 </section>
+
+
 </body>
 </document>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to