Hi.
How about using varargs or a similar approach in your TextField:
<code>
public class ValidatedTextField<T> extends TextField<T>{
public ValidatedTextField(String id, final IModel<T> model, boolean
required, AbstractValidator... validators)
{
super(id, model);
setRequired(required);
for(AbstractValidator validator : validators){
add(validator);
}
}
}
</code>
And the use case:
<code>
TextField t = new ValidatedTextField("id", new Model("your Model"),
true,
EmailAddressValidator.getInstance(),
StringValidator.maximumLength(50));
</code>
Maybe you could then use it in a class factory as you suggested. At least it
will shorten a few lines of code.
Best regards.
--
Marc Nuri
http://blog.marcnuri.com
On Fri, May 8, 2009 at 11:14 AM, Christian Helmbold <
[email protected]> wrote:
>
> I think the difference between sub classing and static factory methods is a
> matter of taste in this case.
>
> If I have many fields, I'd need many classes for them. So I'd group them in
> a sub package. In the case of factory methods I'd group the methods to
> create fields in a class instead of a package.
>
> Subclass:
>
> 1 class UserEmailField extends TextField {
> 2 public UserEmailField(String id, IModel model) {
> 3 super(id, model);
> 4 setRequired(true);
> 5 add(EmailAddressValidator.getInstance())
> 6 add(UniqueValidator.unique(SystemUser.class, "email"));
> 7 }
> 8 }
>
> Factory method:
>
> 1 public static TextField emailTextField(String id){
> 2 return (TextField) new TextField(id)
> 3 .setRequired(true)
> 4 .add(EmailAddressValidator.getInstance())
> 5 .add(UniqueValidator.unique(SystemUser.class,
> "email"));
> 6 }
>
> Your answer shows me, that there is no dramatically simpler way to do this.
> If you ignore the two lines for factory class declaration factory methods
> are even a bit shorter. Or is there an advantage of sub classing that I have
> missed?
>
> Regards,
> Christian
>
>
>
> ----- Ursprüngliche Mail ----
> > Von: Igor Vaynberg <[email protected]>
> > An: [email protected]
> > Gesendet: Freitag, den 8. Mai 2009, 09:08:34 Uhr
> > Betreff: Re: How to avoid code duplication on forms?
> >
> > much simpler
> >
> > class UserEmailField extends TextField {
> > public UserEmailField(String id, IModel model) {
> > super(id, model);
> > add(EmailAddressValidator.getInstance())
> > add(UniqueValidator.unique(SystemUser.class, "email"));
> > }
> > }
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>