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]
>
>

Reply via email to