I've seen the error border, it doesn't do what I want - in our app a red
asterisk indicates a required field and field labels with errors turn red.
What I am looking for is a way to link the label to the component not the
other way around. My primary interest was the validator stuff, the
decoration of the label was a bonus.

-Igor


> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> Jonathan Locke
> Sent: Friday, July 29, 2005 8:14 PM
> To: wicket-user@lists.sourceforge.net
> Subject: Re: [Wicket-user] FieldLabel component
> 
> 
> if you just want to show an error indicator like a red 
> asterisk, see FormComponentFeedbackBorder.
> i personally don't like the idea of changing field label 
> contents on users.  so instead, i've emphasized FeedbackPanel 
> and IFeedback.
> however, you should be able to implement what you're talking 
> about though by implementing IFeedback on a subclass of Label.
> 
> Igor Vaynberg wrote:
> 
> >Hi Guys,
> >
> >Ive been working on forms a lot lately, and what ive been 
> missing from 
> >tapestry is a fieldlabel component. Basically a fieldlabel 
> is a label 
> >that is linked to a form component.
> >
> >This allows to do cool things like:
> >
> >1) FieldLabel can change its apperance based on the form component
> >
> >TextField tf=new RequiredTextField(...) FieldLabel lb=new 
> >FieldLabel("label1","First Name", tf) {
> >     public void initialize() {
> >             add(new AttributeModifier("style", true, new
> >Model("color:red;")) {
> >                     public boolean isEnabled()
> >                     {
> >                             return !getFieldComponent().isValid();
> >                     }
> >             });
> >     }
> >};
> >
> >This will create a field label that will turn red when the 
> linked form 
> >component has an error.
> >
> >Another good use is to prepand an asterisk to the 
> fieldlabel's label if 
> >the linked form component has a requiredvalidator added.
> >
> >2) FieldLabel's label can participate in validator messages
> >
> >With this patch it is possible to create generic error 
> messages of form :
> >
> >"'${label}' is required" or "'${label}' contains an invalid 
> email address"
> >
> >I am looking for feedback and ideas on how to make this 
> better before I 
> >submit this as a patch.
> >
> >Thank you!
> >Igor
> >  
> >
> >-------------------------------------------------------------
> ----------
> >-
> >
> >Index: wicket/markup/html/form/FormComponent.java
> >===================================================================
> >RCS file: 
> >/cvsroot/wicket/wicket/src/java/wicket/markup/html/form/FormC
> omponent.j
> >ava,v
> >retrieving revision 1.43
> >diff -u -r1.43 FormComponent.java
> >--- wicket/markup/html/form/FormComponent.java       28 Jul 
> 2005 11:56:51 -0000   1.43
> >+++ wicket/markup/html/form/FormComponent.java       30 Jul 
> 2005 02:32:19 -0000
> >@@ -30,6 +30,7 @@
> > import wicket.model.IModel;
> > import wicket.util.lang.Classes;
> > import wicket.util.string.StringList;
> >+import wicket.version.undo.Change;
> > 
> > /**
> >  * An html form component knows how to validate itself. Validators 
> >that @@ -71,6 +72,9 @@
> >     /** The validator or validator list for this component. */
> >     private IValidator validator = IValidator.NULL;
> > 
> >+    /** The field label for this component */
> >+    private FieldLabel fieldLabel;
> >+    
> >     /**
> >      * Typesafe interface to code that is called when 
> visiting a form component
> >      *
> >@@ -575,4 +579,24 @@
> >     {
> >             validator.validate(this);
> >     }
> >+    
> >+    protected FormComponent setFieldLabel(FieldLabel label) {
> >+            if (fieldLabel!=null) {
> >+                    
> >+                    addStateChange(new Change() {
> >+                            private final FieldLabel 
> >+oldFieldLabel=FormComponent.this.fieldLabel;
> >+
> >+                            public void undo()
> >+                            {
> >+                                    
> FormComponent.this.fieldLabel=oldFieldLabel;
> >+                            }
> >+                    });
> >+            }
> >+            this.fieldLabel=label;
> >+            return this;
> >+    }
> >+    
> >+    public FieldLabel getFieldLabel() {
> >+            return fieldLabel;
> >+    }
> > }
> >\ No newline at end of file
> >Index: wicket/markup/html/form/validation/AbstractValidator.java
> >===================================================================
> >RCS file: 
> >/cvsroot/wicket/wicket/src/java/wicket/markup/html/form/valid
> ation/Abst
> >ractValidator.java,v
> >retrieving revision 1.31
> >diff -u -r1.31 AbstractValidator.java
> >--- 
> wicket/markup/html/form/validation/AbstractValidator.java     
> 21 Jul 2005 10:46:36 -0000    1.31
> >+++ 
> wicket/markup/html/form/validation/AbstractValidator.java     
> 30 Jul 2005 02:32:19 -0000
> >@@ -21,6 +21,7 @@
> > import java.util.Map;
> > 
> > import wicket.Localizer;
> >+import wicket.markup.html.form.FieldLabel;
> > import wicket.markup.html.form.FormComponent;
> > import wicket.model.IModel;
> > import wicket.model.Model;
> >@@ -139,6 +140,21 @@
> >             final Map resourceModel = new HashMap(4);
> >             resourceModel.put("input", formComponent.getInput());
> >             resourceModel.put("name", formComponent.getId());
> >+            
> >+            // try to retrieve the label from field label, 
> default to empty string
> >+            String labelValue = "";
> >+            FieldLabel label = formComponent.getFieldLabel();
> >+            if (label != null)
> >+            {
> >+                    Object modelObject = label.getModelObject();
> >+                    if (modelObject != null)
> >+                    {
> >+                            labelValue = modelObject.toString();
> >+                    }
> >+            }
> >+            resourceModel.put("label", labelValue);
> >+            
> >+            
> >             return resourceModel;
> >     }
> > }
> >Index: wicket/markup/html/form/FieldLabel.java
> >===================================================================
> >RCS file: wicket/markup/html/form/FieldLabel.java
> >diff -N wicket/markup/html/form/FieldLabel.java
> >--- /dev/null        1 Jan 1970 00:00:00 -0000
> >+++ wicket/markup/html/form/FieldLabel.java  1 Jan 1970 
> 00:00:00 -0000
> >@@ -0,0 +1,55 @@
> >+package wicket.markup.html.form;
> >+
> >+import wicket.AttributeModifier;
> >+import wicket.Component;
> >+import wicket.markup.html.WebMarkupContainer;
> >+import wicket.markup.html.basic.Label; import 
> >+wicket.markup.html.panel.Panel; import wicket.model.IModel; import 
> >+wicket.model.Model; import wicket.model.PropertyModel;
> >+
> >+public class FieldLabel extends Label
> >+{
> >+    protected FormComponent fc;
> >+    
> >+    public FieldLabel(String id, FormComponent formComponent)
> >+    {
> >+            super(id);
> >+            internalInitialize(formComponent);
> >+    }
> >+
> >+    public FieldLabel(String id, String string, 
> FormComponent formComponent)
> >+    {
> >+            super(id, string);
> >+            internalInitialize(formComponent);
> >+    }
> >+    
> >+    public FieldLabel(String id, IModel model, 
> FormComponent formComponent)
> >+    {
> >+            super(id, model);
> >+            internalInitialize(formComponent);
> >+    }
> >+
> >+    private void internalInitialize(FormComponent formComponent)
> >+    {
> >+            if (fc==null) throw new 
> IllegalArgumentException("formComponent cannot be null");
> >+            this.fc=fc;
> >+
> >+            fc.setFieldLabel(this);
> >+            setRenderBodyOnly(true);
> >+            
> >+            initialize();
> >+    }
> >+
> >+    public final FormComponent getFormComponent() {
> >+            return fc;
> >+    }
> >+    
> >+    public void initialize() {
> >+            
> >+    }
> >+    
> >+
> >+    
> >+}
> >  
> >
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration 
> Strategies from IBM. Find simple to follow Roadmaps, 
> straightforward articles, informative Webcasts and more! Get 
> everything you need to get up to speed, fast. 
> http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> 
> 
> 




-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to