Author: hlship
Date: Wed Jan 31 16:27:57 2007
New Revision: 502059

URL: http://svn.apache.org/viewvc?view=rev&rev=502059
Log:
Allow field components to specify a particular clientId to be used to generate 
the client-side id and element name.
Tweak the HTML output from the BeanEditForm component and create more default 
CSS to make it look somewhat "pretty".
Expose the BeanEditForm's inner Form component so that it is possible to record 
or clear error messages.
Add a clearError() method to Form to allow stored errors (and input) to be 
cleared before redisplaying a form.

Modified:
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Loop.java
    
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/corelib/components/BeanEditForm.html
    
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/default.css
    
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html
    
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
    
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/base/AbstractField.java
 Wed Jan 31 16:27:57 2007
@@ -115,8 +115,11 @@
     /** Used a shared instance for all types of fields, for efficiency. */
     private static final ProcessSubmissionAction PROCESS_SUBMISSION_ACTION = 
new ProcessSubmissionAction();
 
+    @Parameter(value = "prop:componentResources.id", defaultPrefix="literal")
     private String _clientId;
 
+    private String _assignedClientId;
+
     private String _elementName;
 
     @Environmental
@@ -162,13 +165,16 @@
     @SetupRender
     final void setup()
     {
-        String id = _resources.getId();
+        // By default, use the component id as the (base) client id. If the 
clientid
+        // parameter is bound, then that is the value to use.
+        
+        String id = _clientId;
 
         // Often, these elementName and _clientId will end up as the same 
value. There are many
         // exceptions, including a form that renders inside a loop, or a form 
inside a component
         // that is used multiple times.
 
-        _clientId = _pageRenderSupport.allocateClientId(id);
+        _assignedClientId = _pageRenderSupport.allocateClientId(id);
         String elementName = _formSupport.allocateElementName(id);
 
         _formSupport.storeAndExecute(this, new SetupAction(elementName));
@@ -177,7 +183,7 @@
 
     public final String getClientId()
     {
-        return _clientId;
+        return _assignedClientId;
     }
 
     public final String getElementName()

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
 Wed Jan 31 16:27:57 2007
@@ -83,15 +83,19 @@
     @Inject
     private Block _enum;
 
+    @Component
+    private Form _form;
+
     @Component(parameters =
     { "value=valueForProperty", "label=prop:propertyEditModel.label",
             "encoder=valueEncoderForProperty", "model=selectModelForProperty",
-            "validate=prop:validateForProperty" })
+            "validate=prop:validateForProperty", "clientId=prop:propertyName" 
})
     private Select _select;
 
     @Component(parameters =
     { "value=valueForProperty", "label=prop:propertyEditModel.label",
-            "translate=prop:translateForProperty", 
"validate=prop:validateForProperty" })
+            "translate=prop:translateForProperty", 
"validate=prop:validateForProperty",
+            "clientId=prop:propertyName" })
     private TextField _textField;
 
     @Inject
@@ -105,6 +109,8 @@
 
     // Values that change with each change to the current property:
 
+    private String _propertyName;
+
     private PropertyEditModel _propertyEditModel;
 
     private Block _blockForProperty;
@@ -116,6 +122,11 @@
         return _model;
     }
 
+    public String getPropertyName()
+    {
+        return _propertyName;
+    }
+
     public void setPropertyName(String propertyName)
     {
         _propertyEditModel = _model.get(propertyName);
@@ -123,6 +134,8 @@
         _blockForProperty = null;
         _fieldForProperty = null;
 
+        _propertyName = propertyName;
+
         String editorType = _propertyEditModel.getEditorType();
 
         if (editorType.equals("text"))
@@ -142,11 +155,6 @@
         throw new IllegalArgumentException(_messages.format("no-editor", 
editorType, propertyName));
     }
 
-    public String getPropertyName()
-    {
-        return _propertyEditModel.getPropertyName();
-    }
-
     boolean onPrepareFromForm()
     {
         // Fire a new prepare event to be consumed by the container. This is 
the container's
@@ -175,7 +183,6 @@
 
         // Use the property name, not the field id, when locating
         // validation message overrides.
-        String overrideId = _propertyEditModel.getPropertyName();
         Messages overrideMessages = 
_resources.getContainerResources().getMessages();
 
         for (String constraint : _validationConstraintGenerator
@@ -190,7 +197,7 @@
                     _fieldForProperty,
                     validatorType,
                     constraintValue,
-                    overrideId,
+                    _propertyName,
                     overrideMessages,
                     _locale);
 
@@ -238,5 +245,10 @@
     {
         return new EnumSelectModel(_propertyEditModel.getPropertyType(), 
_resources
                 .getContainerResources().getMessages());
+    }
+
+    public Form getForm()
+    {
+        return _form;
     }
 }

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
 Wed Jan 31 16:27:57 2007
@@ -429,4 +429,12 @@
     {
         _tracker = tracker;
     }
+
+    /**
+     * Invokes [EMAIL PROTECTED] ValidationTracker#clear()}.
+     */
+    public void clearErrors()
+    {
+        _tracker.clear();
+    }
 }

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Loop.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Loop.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Loop.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Loop.java
 Wed Jan 31 16:27:57 2007
@@ -31,6 +31,7 @@
 import org.apache.tapestry.annotations.Inject;
 import org.apache.tapestry.annotations.Parameter;
 import org.apache.tapestry.annotations.SetupRender;
+import org.apache.tapestry.annotations.SupportsInformalParameters;
 import org.apache.tapestry.services.FormSupport;
 import org.apache.tapestry.services.Heartbeat;
 
@@ -43,6 +44,7 @@
  * full objects when there is not encoder, or as client-side objects when 
there is an encoder).
  */
 @ComponentClass
[EMAIL PROTECTED]
 public class Loop
 {
     /** Setup command for non-volatile rendering. */
@@ -185,7 +187,7 @@
     @Environmental(false)
     private FormSupport _formSupport;
 
-    @Parameter(value="prop:componentResources.elementName", 
defaultPrefix="literal")
+    @Parameter(value = "prop:componentResources.elementName", defaultPrefix = 
"literal")
     private String _elementName;
 
     /**

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/corelib/components/BeanEditForm.html
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/corelib/components/BeanEditForm.html?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/corelib/components/BeanEditForm.html
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/corelib/components/BeanEditForm.html
 Wed Jan 31 16:27:57 2007
@@ -1,18 +1,20 @@
-<form t:type="Form" 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"; 
class="t-beaneditor">
+<form t:id="form" 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
     <t:comp type="Errors"/>
 
-    <div class="t-beaneditor-row" t:type="Loop" t:source="model.propertyNames" 
t:value="propertyName">
-        <t:comp type="Delegate" to="blockForProperty"/>
+    <div class="t-beaneditor">
+        <div class="t-beaneditor-row" t:type="Loop" 
t:source="model.propertyNames"
+            t:value="propertyName">
+            <t:comp type="Delegate" to="blockForProperty"/>
+        </div>
+        <div class="t-beaneditor-row">
+            <input type="submit" value="Create/Update"/>
+        </div>
     </div>
-    <div class="t-beaneditor-row">
-        <input type="submit" value="Create/Update"/>
-    </div>
-
     <t:block id="text">
-        <label t:type="Label" for="textField"/>                
+        <label t:type="Label" for="textField"/>
         <input t:id="textField"/>
     </t:block>
-    
+
     <t:block id="enum">
         <label t:type="Label" for="select"/>
         <input t:id="select"/>

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/default.css
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/default.css?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/default.css
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/default.css
 Wed Jan 31 16:27:57 2007
@@ -121,3 +121,37 @@
   border: 1px solid silver;
   margin: 0px;
 }
+
+DIV.t-beaneditor
+{
+  display: block;
+  background: #ffc;
+  border: 2px solid silver;
+  padding: 2px;
+}
+
+FORM.t-beaneditor LABEL:after
+{
+  content: ":";
+}
+
+DIV.t-beaneditor-row
+{
+  padding: 4px 0px 2px 0px;
+}
+
+DIV.t-beaneditor LABEL:after
+{
+  vertical-align: middle;
+  content: ":";
+}
+
+DIV.t-beaneditor LABEL
+{
+  width: 10%;
+  display: block;
+  float: left;
+  text-align: right;
+  clear: left;
+  padding-right: 3px;
+}
\ No newline at end of file

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html
 Wed Jan 31 16:27:57 2007
@@ -1,7 +1,7 @@
 <t:comp type="Border" 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
     <h1>BeanEditor Component Demo</h1>
     
-    <t:comp type="BeanEditForm" object="registrationData"/>
+    <t:comp id="edit" object="registrationData"/>
               
     <p>
         [<a t:type="ActionLink" t:id="clear">Clear Data</a>]

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
 Wed Jan 31 16:27:57 2007
@@ -714,10 +714,10 @@
                 "Everyone has to have a last name!",
                 "Year of Birth requires a value of at least 1900.");
 
-        _selenium.type("textField", "a");
-        _selenium.type("textField_0", "b");
-        _selenium.type("textField_1", "");
-        _selenium.select("select", "label=Martian");
+        _selenium.type("firstName", "a");
+        _selenium.type("lastName", "b");
+        _selenium.type("birthYear", "");
+        _selenium.select("sex", "label=Martian");
 
         clickAndWait(submitButton);
 
@@ -726,9 +726,9 @@
                 "You must provide at least 5 characters for Last Name.",
                 "You must provide a value for Year of Birth.");
 
-        _selenium.type("textField", "Howard");
-        _selenium.type("textField_0", "Lewis Ship");
-        _selenium.type("textField_1", "1966");
+        _selenium.type("firstName", "Howard");
+        _selenium.type("lastName", "Lewis Ship");
+        _selenium.type("birthYear", "1966");
 
         clickAndWait(submitButton);
 

Modified: 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java?view=diff&rev=502059&r1=502058&r2=502059
==============================================================================
--- 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java
 (original)
+++ 
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java
 Wed Jan 31 16:27:57 2007
@@ -15,12 +15,17 @@
 package org.apache.tapestry.integration.app1.pages;
 
 import org.apache.tapestry.annotations.ApplicationState;
+import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.corelib.components.BeanEditForm;
 import org.apache.tapestry.integration.app1.data.RegistrationData;
 
 @ComponentClass
 public class BeanEditorDemo
 {
+    @Component
+    private BeanEditForm _edit;
+
     @ApplicationState
     private RegistrationData _data;
 
@@ -33,9 +38,10 @@
     {
         return "ViewRegistration";
     }
-    
+
     void onActionFromClear()
     {
         _data = null;
+        _edit.getForm().clearErrors();
     }
 }


Reply via email to