and what happens when someone wants ${label} at row {0} column {1} is required? do we start passing in arrays, lists, or maps for imodels to validators?
why not just do textfield.setlabel(new model("first name at row "+row)); -igor On Wed, May 21, 2008 at 4:52 AM, Hoover, William <[EMAIL PROTECTED]> wrote: > What I'm proposing would not require the same "first name" model on both > validators. I might not have been clear enough in my explanation... > > StringValidator.minimum='${label}' with value '${input}' is shorter than > the minimum of ${minimum} characters. > > CustomStringValidator.minimum='${label}' with value '${input}' at row > {0} is shorter than the minimum of ${minimum} characters. > > MyUsernameValidator.unique='${label}' with value '${input}' at row {0} > is not unique. > > ============================== > > Use Case 1: > > add(new textfield("fname").add(stringvalidator.minimum(5)); > > results in- 'fNameId' with value 'abc' is shorter than the minimum of 5 > characters. > > ============================== > > Use Case 2: > > add(new textfield("fname").setlabel(new model("first > name")).add(stringvalidator.minimum(5)); > > results in- 'first name' with value 'abc' is shorter than the minimum of > 5 characters. > > ============================== > > Use Case 3: > > StringResourceModel srm = new > StringResourceModel("CustomStringValidator.minimum", null, null, new > Object[]{ rowIndex }); > > add(new textfield("fname").add(stringvalidator.minimum(5, srm)); > > results in- 'fNameId' with value 'abc' at row 10 is shorter than the > minimum of 5 characters. > > ============================== > > Use Case 4: > > StringResourceModel srm = new > StringResourceModel("CustomStringValidator.minimum", null, null, new > Object[]{ rowIndex }); > > add(new textfield("fname").setlabel(new model("first > name")).add(stringvalidator.minimum(5, srm)); > > results in- 'first name' with value 'abc' at row 10 is shorter than the > minimum of 5 characters. > > ============================== > > Use Case 5: > > StringResourceModel srm = new > StringResourceModel("CustomStringValidator.minimum", null, null, new > Object[]{ rowIndex }); > > add(new textfield("fname").setlabel(new model("first > name")).add(stringvalidator.minimum(5, srm)).add(new > MyUsernameValidator()); > > results in- 'first name' with value 'abc' at row 10 is shorter than the > minimum of 5 characters. > > results in- 'first name' with value 'abc' at row 10 is not unique. > > ============================== > > -----Original Message----- > From: Igor Vaynberg [mailto:[EMAIL PROTECTED] > Sent: Tuesday, May 20, 2008 8:41 PM > To: users@wicket.apache.org > Subject: Re: Providing IModel to Validators > > On Tue, May 20, 2008 at 3:39 PM, Hoover, William <[EMAIL PROTECTED]> > wrote: >> sure, if you know to override NumberValidator.minimum with: >> >> label.myminimum=My Object at row: {0} with value >> NumberValidator.minimum=${label} '${input}' must be smaller than >> ${minimum} >> >> It seems odd because: >> 1) NumberValidator.minimum (or any other entry in >> Application.properties) does not use ${label} by default > > i have argued for this, but ive been met with resistance. reasoning was > that not everyone uses setLabel() for every component. > >> 2) label.myminimum has to be worded in a way that would accommodate >> all types of IValidator that may be used > > right, the ones in application.properties are generic. of course you can > override the message just for that page/component by simply defining > your own NumberValidator.minimum key > > and if i remember correctly you can do without the label entirely, > defining your own componentid.NumberValidator.minimum - but dont quote > me on this > >> 3) label.myminimum shouldn't really exist on it's own > > of course not, you are calling setlabel(new > resourcemodel("label.minimum")) on that one specific component, its not > meant to be reusable > >> 4) It's not very intuitive to use the label because... well... it's a >> label, not a validation message :o) > > well, this is a label meant to be used inside a validation message. so > there :) i see nothing counter intuitive about > > add(new textfield("fname").setlabel(new model("first name")); and > defining a default StringValidator.minimum=${label} must be at least > ${minimum} characters for messages like "first name must be at least 5 > characters" > >> >> If there were a means to add a IModel when adding any of the >> validators (as described) it would follow the standard Wicket protocol > >> of using models. Any thoughts? > > setLabel() takes in a model... the fact is that the label is scoped to > the formcomponent, not validation message most of the time. eg > > add(new textfield("fname").add(stringvalidator.minimum(5)).add(new > uniqueusernamevalidator()); > > so with your proposal i would have to give the same "first name" model > to both validators, why? i can declare it once on the textfield, the > label of the formcomponent wont change validator to validator. > > -igor > >> >> -----Original Message----- >> From: Igor Vaynberg [mailto:[EMAIL PROTECTED] >> Sent: Tuesday, May 20, 2008 1:52 PM >> To: users@wicket.apache.org >> Subject: Re: Providing IModel to Validators >> >> that is why formcomponents have a setLabel(IModel<String>) whose text >> is then available via ${label} place holder. >> >> -igor >> >> >> On Tue, May 20, 2008 at 7:14 AM, Hoover, William <[EMAIL PROTECTED]> >> wrote: >>> >>> What does everyone think about updating the Wicket core validators to > >>> contain an optional IModel? >>> >>> Simple Use Case: >>> # properties file >>> label.myminimum=My Object at row: {0} with value '${input}' must be >>> smaller than ${minimum} >>> >>> ... >>> final RefreshingView myView = new RefreshingView("tr-my-object-view") >> { >>> protected final void populateItem(final Item item) { >>> ... >>> final TextField myTextField = new >>> TextField("input-text-field"); >>> final IModel myMinValidatorModel = new >>> StringResourceModel("label.myminimum", item, null, new Object[] { >>> item.getIndex() }); >>> >>> myTextField.add(NumberValidator.MinimumValidator.minimum(10L, >>> myMinValidatorModel); >>> ... >>> } >>> }; >>> ... >>> >>> So, instead of seeing a very general message that could apply to any >>> number of fields that may contain the same value: >>> ... >>> '0' is smaller than the minimum of 10. >>> '0' is smaller than the minimum of 10. >>> '0' is smaller than the minimum of 10. >>> ... >>> >>> You would see this: >>> ... >>> My Object at row: 1 with value '0' must be smaller than 10 My Object >>> at row: 12 with value '0' must be smaller than 10 My Object at row: >>> 20 >> >>> with value '0' must be smaller than 10 ... >>> >>> The problem with just overriding the "NumberValidator.minimum" >>> resource in this example is that makes it difficult to add custom >>> property values (i.e. the index in example). >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]