I think factories are useful when you have setup other than in the constructor (using setters or other things). Besides, you can avoid ugly nesting and a little red tape:
{public void onClick() { setResponsePage(...); }} Not necessary, but a little less verbose. []s Gus ---------- Início da mensagem original ----------- De: [EMAIL PROTECTED] Para: wicket-user@lists.sourceforge.net Cc: Data: Sun, 20 Nov 2005 09:13:37 +0100 Assunto: Re: [Wicket-user] Best use of Links > As Igor mentioned. It is completely fine to use. Nothing wrong with it. > > Juergen > > On 11/20/05, Andrew Lombardi <[EMAIL PROTECTED]> wrote: > > So, I see all this talk of using static factory methods to generate a > > Page, but what would be wrong with just using > > > > add(new Link("myLink") { > > public void onClick() { > > setResponsePage(new MyPage(param1, param2, param3)); > > } > > }; > > > > this looks like it ensures that the page doesn't get created until > > the link is clicked (avoiding the stack overflow problem), and it > > avoids usage of PageParameters (which harken me back to MVC > > frameworks anyway (ick!))... > > > > is that right? > > > > > > On Nov 18, 2005, at 3:19 PM, Eduardo Rocha wrote: > > > > > Yeah, I just forgot IPageLink and PageLink (by the way these names can > > > be quite confusing!), so ignore my classes, but I keep my point :P. > > > > > > 2005/11/18, Igor Vaynberg <[EMAIL PROTECTED]>: > > >> Actually what i meant was a simple static factory method that > > >> translates > > >> strongly typed params into PageParameters. > > >> > > >> ie > > >> > > >> class MyBookmarkablePage extends WebPage { > > >> public MyBookmarkablePage(PageParameters params) { > > >> ... > > >> } > > >> public static MyBookmarkablePage(String p1, int p2, String p3) { > > >> PageParameters params=new PageParameters(); > > >> ...fill in params... > > >> return new MyBookmarkablePage(params); > > >> } > > >> } > > >> > > >> also see IPageLink interface that is used by PageLink class. but i > > >> think > > >> this is more work, a simple Link's onclick() implementation is the > > >> path of > > >> least resistance imho. > > >> > > >> -Igor > > >> > > >> > > >> > > >> On 11/18/05, Eduardo Rocha <[EMAIL PROTECTED]> wrote: > > >>> > > >>> If it's OK to write a little more code, you could use a factory for > > >>> the page with the same signature your constructor uses. In my > > >>> opinion > > >>> this could be more elegant, but what Igor said is simpler. Something > > >>> like (not tested): > > >>> > > >>> // reusable class > > >>> public interface IPageCreator { > > >>> Page newInstance(); > > >>> } > > >>> > > >>> // reusable class > > >>> public class PageCreatorLink extends Link { > > >>> public PageCreatorLink(String id, IPageCreator creator) { > > >>> super(id); > > >>> this.creator = creator; > > >>> } > > >>> public void onClick() { > > >>> setResponsePage(creator.newInstance()); > > >>> } > > >>> } > > >>> > > >>> // your class > > >>> public class MyPageCreator implements IPageCreator { > > >>> public MyPageCreator(Object provided) { > > >>> this.provided = provided; > > >>> } > > >>> public Page newInstance() { > > >>> return new MyPage(provided); > > >>> } > > >>> } > > >>> > > >>> // your class > > >>> add(new PageCreatorLink("cancelLink", new MyPageCreator(provided)); > > >>> > > >>> maybe your page class could also be the IPageCreator, serving like a > > >> prototype: > > >>> > > >>> // your class > > >>> public class MyPage extends WebPage implements IPageCreator { > > >>> .... > > >>> } > > >>> > > >>> The factory would be nice when you have to execute some service > > >>> method > > >>> before rendering the page, so you would have more clearly separated > > >>> responsabilities, i.e., the factory would be responsible for calling > > >>> the service and the page would act just for the view. That way your > > >>> classes would be more testable too. > > >>> > > >>> 2005/11/18, Igor Vaynberg <[EMAIL PROTECTED]>: > > >>>> imho that is the best practice. that is what i use whenever i do > > >>>> not > > >> need a > > >>>> bookmarkable page. i have yet to use the PageLink class. > > >>>> PageLink makes > > >> it > > >>>> easier to create links to pages because it lets you specify the > > >>>> class > > >> name > > >>>> of the page or the created page instance. This is ok for pages > > >>>> that are > > >> not > > >>>> bookmarkable and take no parameters, but most of the time that > > >>>> is not > > >> the > > >>>> case in my experience. > > >>>> > > >>>> if you work with bookmarkable pages a lot, a static factory > > >>>> method that > > >>>> fills in pageparameters can help with type safety and forgotten > > >>>> params. > > >>>> > > >>>> -Igor > > >>>> > > >>>> > > >>>> > > >>>> On 11/18/05, Gustavo Hexsel <[EMAIL PROTECTED]> wrote: > > >>>>> Hi all, > > >>>>> > > >>>>> I wanted to know what's the best way to use Links (PageLinks, > > >>>> BookmarkablePageLinks). > > >>>>> > > >>>>> In the beginning, I was using BookmarkablePageLink's and > > >>>>> converting > > >>>> everything to and from Strings. That obviously was flawed, as I > > >>>> was > > >> using > > >>>> string names and passing them back and forth (lost strong-typing, > > >>>> occasionally forgot one parameter, or mistyped the name of it). > > >>>> It also > > >>>> made me reload objects from the database even though I had them > > >>>> handy on > > >> the > > >>>> calling class. > > >>>>> > > >>>>> Then I tried using PageLink's, passing a "new > > >>>> XXXPage(whateverparameter)" in the constructor. That didn't work > > >> either, as > > >>>> pages have links back and forth, leading to stackoverflows. > > >>>>> > > >>>>> Then I moved one step up in the object hierarchy and started > > >>>>> using > > >>>> Link's, but it seems such red tape for each link having to write: > > >>>>> add(new Link("cancelLink") { > > >>>>> public void onClick() { setResponsePage(new > > >>>> EditProviderPage(provider)); }; > > >>>>> }); > > >>>>> > > >>>>> Any suggestions? > > >>>>> > > >>>>> > > >>>>> []s Gus > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >> ------------------------------------------------------- > > >>>>> This SF.Net email is sponsored by the JBoss Inc. Get Certified > > >>>>> Today > > >>>>> Register for a JBoss Training Course. Free Certification Exam > > >>>>> for All Training Attendees Through End of 2005. For more info > > >>>>> visit: > > >>>>> http://ads.osdn.com/?ad_idv28&alloc_id845&opclick > > >>>>> _______________________________________________ > > >>>>> Wicket-user mailing list > > >>>>> Wicket-user@lists.sourceforge.net > > >>>>> > > >> https://lists.sourceforge.net/lists/listinfo/wicket-user > > >>>>> > > >>>> > > >>>> > > >>> > > >>> > > >>> ------------------------------------------------------- > > >>> This SF.Net email is sponsored by the JBoss Inc. Get Certified > > >>> Today > > >>> Register for a JBoss Training Course. Free Certification Exam > > >>> for All Training Attendees Through End of 2005. For more info visit: > > >>> http://ads.osdn.com/?ad_idv28&alloc_id845&opclick > > >>> _______________________________________________ > > >>> Wicket-user mailing list > > >>> Wicket-user@lists.sourceforge.net > > >>> https://lists.sourceforge.net/lists/listinfo/wicket-user > > >>> > > >> > > >> > > > > > > > > > ------------------------------------------------------- > > > This SF.Net email is sponsored by the JBoss Inc. Get Certified Today > > > Register for a JBoss Training Course. Free Certification Exam > > > for All Training Attendees Through End of 2005. For more info visit: > > > http://ads.osdn.com/?ad_idv28&alloc_id845&opÌk > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > ------------------------------------------------------- > > This SF.Net email is sponsored by the JBoss Inc. Get Certified Today > > Register for a JBoss Training Course. Free Certification Exam > > for All Training Attendees Through End of 2005. For more info visit: > > http://ads.osdn.com/?ad_idv28&alloc_id845&opclick > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by the JBoss Inc. Get Certified Today > Register for a JBoss Training Course. Free Certification Exam > for All Training Attendees Through End of 2005. For more info visit: > http://ads.osdn.com/?ad_idv28&alloc_id845&op ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today Register for a JBoss Training Course. Free Certification Exam for All Training Attendees Through End of 2005. For more info visit: http://ads.osdn.com/?ad_idv28&alloc_id845&op=click _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user