AddressFormComponent should extend Panel, not FormComponentPanel.
FormComponentPanel is used for special cases where you have several
FormComponents that work together to edit a model value, such as a date
editor that has dropdowns for month and day.

On a FormComponentPanel, you have to implement convertValue() to gather
the input from your subcomponents, synthesize them into a single value,
and call setConvertedValue(). Since you never call setConvertedValue(),
your panel pushes null back into your address model.

jk

On Tue, May 05, 2009 at 11:22:44AM -0700, FlyingMustang wrote:
> 
> 
> igor.vaynberg wrote:
> > 
> > show us your code.
> > 
> 
> Ok, I have a class 'Person' with an'Address-Property. My Form-object has a
> simple Model wrapping a Person-object. The constructor creating the Panel
> with the form contains these lines:
> 
> form = new Form<Person>("form", new Model<Person>());
> personFormComponent = new
> PersonFormComponent<Student>("personFormComponent", form.getModel());
> addressFormComponent = new
> AddressFormComponent<Address>("addressFormComponent", new
> PropertyModel<Address>(this.form.getModel(), "address"));
> 
> form.add(personFormComponent);
> form.add(addressFormComponent);
> 
> After creation of this Panel I call form.setModelObject(...). So the model
> ist not empty. The PersonFormComponent works well as it only sets some
> String-Properties of the Person-Object. But I have trouble with the
> AddressFormComponent which looks like this:
> 
> public class AddressFormComponent<T extends Address> extends
> FormComponentPanel<T> {
>       protected TextField<String> cityField, postcodeField, streetField;
>       protected IModel<T> model;
> 
>       public AddressFormComponent(String id, IModel<T> model) {
>               super(id, model);
> 
>               // Model
>               this.model = model;
> 
>               // Straße
>               streetField = new TextField<String>("streetField", new
> PropertyModel<String>(model, "street"));
>               streetField.setRequired(true);
>               streetField.add(StringValidator.lengthBetween(0, 100));
> 
>               // PLZ
>               postcodeField = new TextField<String>("postcodeField", new
> Model<String>(""));
>               postcodeField.setRequired(true);
> 
>               // Stadt
>               cityField = new TextField<String>("cityField", new 
> Model<String>(""));
>               cityField.setRequired(true);
>               cityField.add(StringValidator.lengthBetween(0, 50));
> 
>               this.add(streetField);
>               this.add(postcodeField);
>               this.add(cityField);
>       }
> }
> 
> After submitting the whole form (with an AjaxButton) the Address-Property of
> my Person-Object ist null. Perhaps I did not use the Models correctly ...?
> -- 
> View this message in context: 
> http://www.nabble.com/Example-for-FormComponentPanel-best-practice-for-reusable-form-components-tp23391811p23393211.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> 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

Reply via email to