What if you want to reuse the inner class form in another page (you have to make it public and non-inner for visibility) and then you want to override the onSubmit() method. If I just create a public class MyForm and stick the form contents (minus the <form> tags) in MyForm.html, then wicket cannot find any wicket variables on the form (see first post).
If you encapsulate the form in a panel, then the only problem is that you cannot get to the onSubmit() method of the form (but if you delegate all the work to a public method on the panel, then you can override that). Not so pretty. This is a bit of a corner case, but the fact is that forms are not readily accessible wicket objects like panels and pages ( you cannot easily extend your own publically accessible forms) or am I missing something? Pieter On Wed, Feb 11, 2009 at 4:28 PM, Igor Vaynberg <[email protected]>wrote: > what is the problem of having the form as an inner class? > > public class mypage extends webpage { > > private class myform extends form { > ... > } > > public mypage() { > add(new myform(..) { protected void onsubmit() {...}}); > } > } > > -igor > > On Wed, Feb 11, 2009 at 6:40 AM, pieter claassen <[email protected]> > wrote: > > I am trying to move a form from an inner class that extends Form to a > public > > class. This is so that I can override the onSubmit() method of my form. > > > > Below are my files. > > > > When I add the form to a wicket page with > > > > add(new TemplateEditForm("templateeditform", templatemodel)); > > > > and the corresponding html code > > > > <form wicket:id="templateeditform">editform</form> > > > > My wicket code doesn't pick the wicket:ids in the TemplateEditForm.html > file > > up > > > > WicketMessage: The component(s) below failed to render. A common > > problem is that you have added a component in code but forgot to > > reference it in the markup (thus the component will never be > > rendered). > > > > 1. [MarkupContainer [Component id = name]] > > 2. [MarkupContainer [Component id = version]] > > 3. [MarkupContainer [Component id = author]] > > 4. [MarkupContainer [Component id = active]] > > 5. [MarkupContainer [Component id = description]] > > 6. [MarkupContainer [Component id = textarea]] > > 7. [MarkupContainer [Component id = type]] > > 8. [MarkupContainer [Component id = submit]] > > > > I am sure I am doing something stupid, but I cannot find the solution to > > this. Any ideas? > > > > ===== > > > > public class TemplateEditForm extends Form { > > > > private TemplateWebModel templatemodel; > > > > public TemplateEditForm(String id, TemplateWebModel templatemodel) { > > super(id); > > this.templatemodel = templatemodel; > > setModel(new CompoundPropertyModel(templatemodel)); > > add(new RequiredTextField("name")); > > add(new RequiredTextField("version", java.lang.Long.class)); > > add(new RequiredTextField("author")); > > add(new CheckBox("active")); > > add(new VariableTextFieldPanel("description", new PropertyModel( > > templatemodel.getObject(), "description"))); > > DropDownChoice ddc = new DropDownChoice("type", Arrays > > .asList(TemplateType.values()), new IChoiceRenderer() { > > > > public Object getDisplayValue(Object object) { > > return getString(object.toString()); > > } > > > > public String getIdValue(Object object, int index) { > > return object.toString(); > > } > > > > }); > > ddc.setRequired(true); > > add(ddc); > > add(new Button("submit", new ResourceModel("submit"))); > > > > } > > > > @Override > > public void onSubmit() { > > WicketApplication.get().getTemplateFactory().store( > > templatemodel.getEntity()); > > setResponsePage(new TemplateListPage()); > > } > > } > > > > And the corresponding html code > > > > ======= > > > > > > <wicket:extend> > > <table> > > <tr> > > <td><wicket:message key="name" /></td> > > <td><input wicket:id="name" /></td> > > </tr> > > <tr> > > <td><wicket:message key="version" /></td> > > <td><input wicket:id="version" /></td> > > </tr> > > <tr> > > <td><wicket:message key="author" /></td> > > <td><input wicket:id="author" /></td> > > </tr> > > <tr> > > <td><wicket:message key="active" /></td> > > <td><input type="checkbox" wicket:id="active" /></td> > > </tr> > > <tr> > > <td><wicket:message key="description" /></td> > > <td><span wicket:id="description"></span></td> > > </tr> > > <tr> > > <td><wicket:message key="type" /></td> > > <td><select wicket:id="type"> > > <option></option> > > </select></td> > > </tr> > > > > <tr> > > <td colspan="2"><input wicket:id="submit" type="submit"></td> > > </tr> > > </table> > > </wicket:extend> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
