Okay let's pre-populate this field: add(new TextField("url", new PropertyModel(cnavUrl, "URL")) .setRequired(true) .add(new UrlValidator()));
Its mode is a new PropertyModel(cnavUrl, "URL"), which is the "CnavUrl cnavUrl = new MorphiaCnavUrl();". So it's the cnavUrl.getUrl() value. What do you get when you call new MorphiaCnavUrl().getUrl()? That's what should appear in the TextField when you first load the page (normally read form the DB). ~ Thank you, Paul Bors -----Original Message----- From: Daniel Watrous [mailto:dwmaill...@gmail.com] Sent: Thursday, July 18, 2013 6:03 PM To: users@wicket.apache.org Subject: Re: Form questions I've made a lot of progress and been through chapters 9 and 10 of Wicket Free Guide, but I'm still stumped on point #2, pre-populating the form. Here's what I have right now: public class CnavForm extends Form { @Inject private CnavUrlDAO cnavUrlDAO; public CnavForm(String id) { super(id); CnavUrl cnavUrl = new MorphiaCnavUrl(); setModel(new Model((Serializable) cnavUrl)); add(new TextField("url", new PropertyModel(cnavUrl, "URL")) .setRequired(true) .add(new UrlValidator())); add(new HiddenField("objectid", new PropertyModel(cnavUrl, "id"))); add(new Button("publish") { @Override public void onSubmit() { CnavUrl cnavUrl = (CnavUrl) CnavForm.this.getModelObject(); // check for existing record to know if this is a create or update if (((MorphiaCnavUrlModel)cnavUrl).getId() == null) { // create cnavUrlDAO.save(cnavUrl); } else { // update cnavUrlDAO.save(cnavUrl); } } }); } } I need to know how to do two things. 1) how to link to the page that displays the form, and pass it the ID for the record I want to edit 2) load the object from the database and have it replace the model I create in the constructor Obviously I can make a database call and get the object. Is the constructor called every time the page is requested, so that I could check for an ID and either create the model or load it from the database? If so, then I just need help with #1. Thanks, Daniel On Wed, Jul 17, 2013 at 10:19 AM, Daniel Watrous <dwmaill...@gmail.com>wrote: > I think I'm getting it now. The Form needs to be embedded in a panel > for the type of inclusion that I'm interested in. > > I created a CnavFormPanel.java and changed CnavForm.html to > CnavFormPanel.html. I left CnavForm.java alone. > > In CnavModify.java I removed this > > Form form = new CnavForm("cnavFormArea"); > add(form); > > And added this > > add(new CnavFormPanel("cnavFormArea")); > > That works. Thanks for your help. > > Daniel > > > On Wed, Jul 17, 2013 at 10:07 AM, Daniel Watrous <dwmaill...@gmail.com>wrote: > >> I can make it work if I put the markup from CnavForm.html directly >> into CnavModify, but the form is not as reusable then. I would have >> to duplicate the markup for other pages that use the same form... >> >> Dnaiel >> >> >> On Wed, Jul 17, 2013 at 9:55 AM, Daniel Watrous <dwmaill...@gmail.com>wrote: >> >>> That's what I tried to do. I created CnavForm.java and >>> CnavForm.html. In the latter file I have this >>> <wicket:panel> >>> <form wicket:id="cnavForm"...> >>> // form details >>> </form> >>> </wicket:panel> >>> >>> Then I have CnavModify.java and CnavModify.html. You already see >>> what I have in CnavModify.java from my last email. My CnavModify.html has this. >>> <wicket:extend> >>> <span wicket:id="cnavFormArea">Here's the form</span> >>> </wicket:extend> >>> >>> Rather than render I'm getting this error: >>> Last cause: Component [cnavFormArea] (path = [0:cnavFormArea]) must >>> be applied to a tag of type [form], not: '<span wicket:id="cnavFormArea" >>> id="cnavFormArea3">' (line 0, column 0) >>> >>> I'll keep trying and report back when I figure it out. >>> >>> Daniel >>> >>> >>> On Tue, Jul 16, 2013 at 10:50 PM, Paul Bors <p...@bors.ws> wrote: >>> >>>> Wicket is a MVC component driven framework similar to Swing. >>>> In short, what you want to do is create your own Panel with that >>>> form file of yours and add it to another Panel as a child. >>>> >>>> See chapter 4 "Keeping control over HTML" of the Wicket Free Guide at: >>>> http://code.google.com/p/wicket-guide/ >>>> >>>> Also available from under the Learn section as the Books link on >>>> the right side navigation section on Wicket's home page at: >>>> http://wicket.apache.org/learn/books/ >>>> >>>> ~ Thank you, >>>> Paul Bors >>>> >>>> -----Original Message----- >>>> From: Daniel Watrous [mailto:dwmaill...@gmail.com] >>>> Sent: Tuesday, July 16, 2013 7:13 PM >>>> To: users@wicket.apache.org >>>> Subject: Re: Form questions >>>> >>>> Thanks Paul and Sven. I got the form to work and available in the >>>> onSubmit handler. >>>> >>>> Now I'm interested in splitting the form out into it's one file. So >>>> I created a class that has nothing more than the form, but I'm not >>>> sure how to include this into a page. >>>> >>>> In my class I do this: >>>> >>>> public class CnavModify extends ConsoleBasePage { >>>> >>>> public CnavModify(PageParameters parameters) { >>>> super(parameters); >>>> >>>> Form form = new CnavForm("cnavFormArea"); >>>> add(form); >>>> } >>>> } >>>> >>>> My CnavModify obviously extends a base page. What do I put inside >>>> the <wicket:extend> tag to have the form render? >>>> >>>> Daniel >>>> >>>> >>>> On Tue, Jul 16, 2013 at 12:00 AM, Sven Meier <s...@meiers.net> wrote: >>>> >>>> > Hi, >>>> > >>>> > >>>> > Some problems I can't figure out. The code to create the button >>>> > complains >>>> >> that it requires a CnavUrl but gets back a String. >>>> >> >>>> >> add(new Button("publish", model) { >>>> >> @Override >>>> >> public void onSubmit() { >>>> >> CnavUrl cnavUrl = (CnavUrl) getModelObject(); >>>> >> System.out.println("publish"); >>>> >> } >>>> >> }); >>>> >> >>>> > >>>> > a Button always has a IModel<String> to fill the value attribute. >>>> > Note that in #onSubmit() you're getting the model object of the >>>> > button, not of your form. >>>> > You can write: >>>> > >>>> > add(new Button("publish", model) { >>>> >> @Override >>>> >> public void onSubmit() { >>>> >> CnavUrl cnavUrl = (CnavUrl) >>>> MyForm.this.getModelObject(); >>>> >> System.out.println("publish"); >>>> >> } >>>> >> }); >>>> >> >>>> > >>>> > Using generic types in your code should help you. >>>> > >>>> > Sven >>>> > >>>> > >>>> > >>>> > On 07/15/2013 11:41 PM, Daniel Watrous wrote: >>>> > >>>> >> Hello, >>>> >> >>>> >> I'm interested in creating a single Form that will accommodate >>>> >> the following use cases >>>> >> 1) display blank for creating new records >>>> >> 2) pre-populate for editing existing records >>>> >> 3) map submitted values on to an existing domain object >>>> >> 4) accommodate two actions, Save Draft -or- Publish >>>> >> >>>> >> I'm following Wicket in Action and within my Form constructor I >>>> >> create my model, like this >>>> >> >>>> >> CnavUrl cnavUrl = new BasicCnavUrl(); >>>> >> IModel model = new Model((Serializable) cnavUrl); >>>> >> setModel(model); >>>> >> >>>> >> I then use PropertyModel >>>> >> >>>> >> add(new TextField("url", new PropertyModel(cnavUrl, >>>> >> "url"))); >>>> >> >>>> >> For the two actions, I'm creating the Button objects like this >>>> >> >>>> >> add(new Button("publish", model) { >>>> >> @Override >>>> >> public void onSubmit() { >>>> >> CnavUrl cnavUrl = (CnavUrl) getModelObject(); >>>> >> System.out.println("publish"); >>>> >> } >>>> >> }); >>>> >> >>>> >> Some problems I can't figure out. The code to create the button >>>> >> complains that it requires a CnavUrl but gets back a String. >>>> >> >>>> >> It seems that a new BasicCnavUrl is created once with the Form. >>>> >> What happens on subsequent calls? Can I always expect my model >>>> >> to have the data from the current form submission? >>>> >> >>>> >> Is there a best way to incorporate the idea of an edit, where >>>> >> the model is pre-populated from a data source and pre-fills the >>>> >> Form >>>> fields? >>>> >> >>>> >> Thanks, >>>> >> Daniel >>>> >> >>>> >> >>>> > >>>> > ------------------------------**------------------------------**- >>>> > ----- >>>> > --- To unsubscribe, e-mail: >>>> > users-unsubscribe@wicket.**apache.org >>>> <users-unsubscribe@wicket.apache. >>>> > org> For additional commands, e-mail: >>>> > org> users-h...@wicket.apache.org >>>> > >>>> > >>>> >>>> >>>> ------------------------------------------------------------------- >>>> -- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>>> For additional commands, e-mail: users-h...@wicket.apache.org >>>> >>>> >>> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org