> if there are issues with validator messages, we should work > on that separately. this has nothing whatsoever to do with > feedback components, imo.
See point 2 of my original post. I don't really care about how the feedback works, I was trying to improve the validation messages. That's why abstractvalidator is patched in the patch I proposed. > why would you want the label's model? it's just a slot to > put some text. you're going to want to localize all these > messages anyway. > the feedback label component should > construct a key based on the component its attached to (with > the ability to override the key > construction) and then load > the resource string that way... If I will be adding a label I will make sure its model is localized. Getmodelobjectasstring() should return the localized version since that's what will be displayed on screen by the label anyways. > > Igor Vaynberg wrote: > > >I am not constructing the validator message, the > abstractvalidator is. > >It would be nice if wicket supported generic validator > messages out of > >the box > >- all other frameworks do. This is the feature I was trying to add. > > > >By having a link to a label component inside the form component you > >know where to look for the label's model. > > > >Igor > > > > > > > > > >>-----Original Message----- > >>From: [EMAIL PROTECTED] > >>[mailto:[EMAIL PROTECTED] On Behalf > Of Jonathan > >>Locke > >>Sent: Saturday, July 30, 2005 10:03 AM > >>To: wicket-user@lists.sourceforge.net > >>Subject: Re: [Wicket-user] Feedback Refactor Idea > >> > >> > >> > >>Jonathan Locke wrote: > >> > >> > >> > >>>i think you're missing the point. > >>> > >>>formcomponents should not possess feedbacks because > >>> > >>> > >>formcomponents can > >> > >> > >>>be wired to more than one feedback component. so the relationship > >>>needs to be the other way around. it's also important that > >>>formcomponents never know anything about the feedback > >>> > >>> > >>components that > >> > >> > >>>are watching them. > >>> > >>>you know which form component to query for your label because you > >>>wrote the feedback component and it should take the form > >>> > >>> > >>component it > >> > >> > >>>connects to as an argument to its constructor. i already > >>> > >>> > >>showed this > >> > >> > >>>once below. you don't cast anything in this model! you write a > >>>first-class label object subclass that takes the form > >>> > >>> > >>component as an > >> > >> > >>>argument. then you can do whatever you want with the form > >>> > >>> > >>component > >> > >> > >>>to construct your label validator message... > >>> > >>> > >>i should have added "when updateFeedback() is called" right > before the > >>elipsis. > >> > >> > >> > >>>Igor Vaynberg wrote: > >>> > >>> > >>> > >>>>What about generic validator messages - this is more > >>>> > >>>> > >>important then > >> > >> > >>>>the look and feel of the label which I can achieve in a thousand > >>>>different ways. > >>>> > >>>>Using this model it is not possible to generically identify which > >>>>Ifeedback belongs to which FormComponent. > >>>> > >>>>And what if there are more then one - how do I know which one to > >>>>query for the label? > >>>> > >>>>And I still have to cast Ifeedback to Component in order > >>>> > >>>> > >>to retrieve > >> > >> > >>>>the model used for the label. > >>>> > >>>>Igor > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>>-----Original Message----- > >>>>>From: [EMAIL PROTECTED] > >>>>>[mailto:[EMAIL PROTECTED] On Behalf Of > >>>>>Jonathan Locke > >>>>>Sent: Saturday, July 30, 2005 1:04 AM > >>>>>To: wicket-user@lists.sourceforge.net > >>>>>Subject: [Wicket-user] Feedback Refactor Idea > >>>>> > >>>>> > >>>>>at this point, it looks like it would make more sense to > >>>>> > >>>>> > >>me to break > >> > >> > >>>>>with compatibility and change IFeedback to something more > >>>>> > >>>>> > >>like this: > >> > >> > >>>>>interface IFeedback > >>>>>{ > >>>>> public void updateFeedback(); > >>>>>} > >>>>> > >>>>>then have the framework call updateFeedback() on each IFeedback > >>>>>implementing component on the page at the appropriate > >>>>> > >>>>> > >>time (probably > >> > >> > >>>>>onBeginRequest(), but subject to implementation details). > >>>>> > >>>>>then we can implement any kind of feedback component > that we want > >>>>>to. igor can implement like this: > >>>>> > >>>>>public class FormComponentFeedbackLabel extends Label implements > >>>>>IFeedback { > >>>>> FormComponent component; > >>>>> > >>>>> public FormComponentFeedbackLabel(FormComponent component) > >>>>> { > >>>>> this.component = component; > >>>>> } > >>>>> > >>>>> public void updateFeedback() > >>>>> { > >>>>> // Set label look and feel based on any error in component > >>>>> } > >>>>>} > >>>>> > >>>>>FormComponentErrorIndicator would be similar, showing/hiding its > >>>>>content on error. And FeedbackPanel and > >>>>> > >>>>> > >>FormComponentFeedbackBorder > >> > >> > >>>>>would do their recursive magic in update() > >>>>> > >>>>>so now every feedback component is "pull model" and > >>>>> > >>>>> > >>updated at the > >> > >> > >>>>>appropriate time by implementing updateFeedback(). best > >>>>> > >>>>> > >>of all, the > >> > >> > >>>>>component can do absolutely anything based on the state > >>>>> > >>>>> > >>of any other > >> > >> > >>>>>components passed in to whatever constructor the feedback > >>>>> > >>>>> > >>component > >> > >> > >>>>>has... > >>>>> > >>>>>doesn't this seem a whole lot simpler and more flexible? > >>>>> > >>>>>Jonathan Locke wrote: > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>ok, i see... it looks like this is all changed now. if i > >>>>>> > >>>>>> > >>>>>understand, > >>>>> > >>>>> > >>>>> > >>>>>>the "collectingComponent" is really a formComponent that > >>>>>> > >>>>>> > >>>>>the feedback > >>>>> > >>>>> > >>>>> > >>>>>>is optionally attached to. i think this is actually > >>>>>> > >>>>>> > >>slightly more > >> > >> > >>>>>>general than the old code, which only searched parents. > >>>>>>but the refactor doesn't > >>>>>>seem like it's done because the whole idea of a feedback > >>>>>> > >>>>>> > >>border is > >> > >> > >>>>>>kindof meaningless since the containment hierarchy isn't > >>>>>> > >>>>>> > >>>>>always being > >>>>> > >>>>> > >>>>> > >>>>>>used to wire things up. > >>>>>>it seems like there ought to be (at least) two classes here... > >>>>>>FormComponentFeedbackBorder, > >>>>>>which visits its children looking for errors and > >>>>>>FormComponentErrorIndicator, which changes its visibility > >>>>>> > >>>>>> > >>>>>based on any > >>>>> > >>>>> > >>>>> > >>>>>>errors set on a particular form component (which is what > >>>>>>"collectingComponent" > >>>>>>seems to be). > >>>>>>given this refactor, i'm unsure what use IFeedback is at > >>>>>> > >>>>>> > >>>>>all... seems > >>>>> > >>>>> > >>>>> > >>>>>>like each feedback implementation can just do its own > search for > >>>>>>errors and we could remove the IFeedback from Form > constructor... > >>>>>> ???? > >>>>>> > >>>>>>Jonathan Locke wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>efficiency is the least of our worries here. what's > >>>>>>> > >>>>>>> > >>more, > >> > >> > >>>>>the search > >>>>> > >>>>> > >>>>> > >>>>>>>for feedback interfaces on a form validate (which > doesn't > >>>>>>> > >>>>>>> > >>>>>happen that > >>>>> > >>>>> > >>>>> > >>>>>>>often) is already in place in order to support the > >>>>>>> > >>>>>>> > >>>>>existing extension > >>>>> > >>>>> > >>>>> > >>>>>>>mechanism. while your suggested change would fix your > >>>>>>> > >>>>>>> > >>particular > >> > >> > >>>>>>>problem, wicket needs to take a more general view. it > should be > >>>>>>>possible to implement absolutely any kind of feedback > >>>>>>> > >>>>>>> > >>>>>mechanism for > >>>>> > >>>>> > >>>>> > >>>>>>>forms. not just label-oriented feedback. i think we > >>>>>>> > >>>>>>> > >>should stick > >> > >> > >>>>>>>with what we've got since it's completely general and > >>>>>>> > >>>>>>> > >>>>>enhance it only > >>>>> > >>>>> > >>>>> > >>>>>>>if we have to in order to implement a feedback label > >>>>>>> > >>>>>>> > >>>>>component. make > >>>>> > >>>>> > >>>>> > >>>>>>>sense? > >>>>>>> > >>>>>>>i agree that you shouldn't have to cast the IFeedback > >>>>>>> > >>>>>>> > >>to a > >> > >> > >>>>>Component. > >>>>> > >>>>> > >>>>> > >>>>>>>in the past, this was not necessary... i no longer > >>>>>>> > >>>>>>> > >>understand the > >> > >> > >>>>>>>code here though... what is this refactor, eelco? > >>>>>>>and what is a "collectingComponent" ?? > >>>>>>>in the past, any component could implement IFeedback > >>>>>>> > >>>>>>> > >>and act as a > >> > >> > >>>>>>>"sink" for feedback information: > >>>>>>> > >>>>>>>public interface IFeedback > >>>>>>>{ > >>>>>>> /** > >>>>>>> * Called to add feedback messages from a component. If the > >>>>>>>component is a > >>>>>>> * container, messages will be added for all children of the > >>>>>>>container. > >>>>>>> * > >>>>>>> * @param component > >>>>>>> * The component with associated feedback messages > >>>>>>> * @param recurse > >>>>>>> * True if feedback messages should be added from > >>>>>>>children of the > >>>>>>> * given component > >>>>>>> */ > >>>>>>> public void addFeedbackMessages(Component component, boolean > >>>>>>>recurse); } > >>>>>>> > >>>>>>>this is a very powerful way to wire things up and i > don't > >>>>>>> > >>>>>>> > >>>>>understand > >>>>> > >>>>> > >>>>> > >>>>>>>why this was changed. > >>>>>>> > >>>>>>>Igor Vaynberg wrote: > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>>I can kind of see what you are saying. The abstract > >>>>>>>> > >>>>>>>> > >>>>>validator would > >>>>> > >>>>> > >>>>> > >>>>>>>>have to search the page and find the Ifeedback for > the > >>>>>>>> > >>>>>>>> > >>>>>formcomponent > >>>>> > >>>>> > >>>>> > >>>>>>>>in error. But what if you have two ifeedbacks for a > >>>>>>>> > >>>>>>>> > >>>>>component - the > >>>>> > >>>>> > >>>>> > >>>>>>>>feedback panel and the label? The search is also > >>>>>>>> > >>>>>>>> > >>inefficient for > >> > >> > >>>>>>>>something simple like this, I don't think a link in a > >>>>>>>> > >>>>>>>> > >>>>>formcomponent > >>>>> > >>>>> > >>>>> > >>>>>>>>to a labelcomponent is that big a deal. In abstract > >>>>>>>> > >>>>>>>> > >>validator you > >> > >> > >>>>>>>>would also have to cast Ifeedback to a Component in > >>>>>>>> > >>>>>>>> > >>order > >> > >> > >>>>>to get the > >>>>> > >>>>> > >>>>> > >>>>>>>>model, this isnt very safe, it would be nice to have > >>>>>>>> > >>>>>>>> > >>>>>Icomponent and > >>>>> > >>>>> > >>>>> > >>>>>>>>have Ifeedback extend Icomponent. > >>>>>>>> > >>>>>>>>Igor > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>>>-----Original Message----- > >>>>>>>>>From: [EMAIL PROTECTED] > >>>>>>>>>[mailto:[EMAIL PROTECTED] On > Behalf Of > >>>>>>>>>Jonathan Locke > >>>>>>>>>Sent: Friday, July 29, 2005 10:03 PM > >>>>>>>>>To: wicket-user@lists.sourceforge.net > >>>>>>>>>Subject: Re: [Wicket-user] FieldLabel component > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>well, i don't know what's happened to the feedback > >>>>>>>>> > >>>>>>>>> > >>>>>interface stuff > >>>>> > >>>>> > >>>>> > >>>>>>>>>recently, but it was originally designed to be > >>>>>>>>> > >>>>>>>>> > >>general enough to > >> > >> > >>>>>>>>>support what you're > >>>>>>>>>trying to do. seems like what you're writing is > >>>>>>>>> > >>>>>>>>> > >>more or less a > >> > >> > >>>>>>>>>FormComponentFeedbackLabel. and the link is simply > >>>>>>>>> > >>>>>>>>> > >>implementing > >> > >> > >>>>>>>>>IFeedback (or it used to be... i'm not sure what's > >>>>>>>>> > >>>>>>>>> > >>changed... it > >> > >> > >>>>>>>>>looks unfamiliar now). > >>>>>>>>>the form code then finds the associated feedback > >>>>>>>>> > >>>>>>>>> > >>>>>elements for each > >>>>> > >>>>> > >>>>> > >>>>>>>>>form component. > >>>>>>>>> > >>>>>>>>>Igor Vaynberg wrote: > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>>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 > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>------------------------------------------------------- > >>>>>>>>>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 > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>------------------------------------------------------- > >>>>>>>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 > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>------------------------------------------------------- > >>>>>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 > >>>> > >>>> > >>>> > >>>> > >>>> > >>>------------------------------------------------------- > >>>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 > >> > >> > >> > >> > >> > > > > > > > > > >------------------------------------------------------- > >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 > > > ------------------------------------------------------- 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