The panel is part of the form, but only needs to access one property
of MyModel. The rest is handled by other components of the form. The
compoundPropertyModel is passed through like this:

MyForm form = new MyForm("form", <CompoundPropertyModel>);

Then within MyForm, the panel is added. I also want to reuse the panel
for multiple properties of different Models, so it shouldn't depend on
the property name ("text" in this case).

In MyForm I changed
  add(new MyPanel("textPanel", new PropertyModel(this.getModelObject(), "text"))
into
  add(new MyPanel("textPanel", new PropertyModel(this.getModel(), "text"))

which works.

thanks,

Pieter





2007/6/13, Gregory Maes <[EMAIL PROTECTED]>:
> Where do you use a CompoundPropertyModel?
>
> For your problem you have several solutions.
> Here is 2 of them :
>
>
> 1) - With the CompoundPropertyModel
>
> class MyModel {
>   private String text;
>
>   public MyModel(String text) {
>     this.text = text;
>   }
>
>   public String getText(){
>     return text;
>   }
>   public void setText(String text) {
>     this.text = text;
>   }
> }
>
> class MyPanel extends Panel{
>
>   public MyPanel(String id, MyModel myModelObject){
>     super(id, new CompoundPropertyModel(myModelObject));
>     add(new TextField("text")); // the TextField id must be the name of your 
> object property
>     (...)
>   }
>
> }
> MyModel myModelObject = new MyModel("hello");
> add(new MyPanel("textPanel", myModelObject);
>
>
>
> 2) - With the PropertyModel
>
>
> class MyModel {
>   private String text;
>
>   public MyModel(String text) {
>     this.text = text;
>   }
>
>   public String getText(){
>     return text;
>   }
>   public void setText(String text) {
>     this.text = text;
>   }
> }
>
> class MyPanel extends Panel{
>
>   public MyPanel(String id, MyModel myModelObject){
>     super(id);
>     add(new TextField("panelField", new PropertyModel(myModelObject,"text")));
>     (...)
>   }
>
> }
> MyModel myModelObject = new MyModel("hello");
> add(new MyPanel("textPanel", myModelObject);
>
>
> Enjoy :-)
>
> Greg
>
> Pieter Cogghe a écrit :
>
> > Thanks for the responses,
> >
> > I ran into trouble when using a panel. Somehow I can't get my model
> > property associated with the textfield in the panel.
> >
> > class MyModel {
> >    (...)
> >   public String getText(){
> >     return text;
> >   }
> >   (...)
> > }
> >
> > My panel (simplified)
> >
> > class MyPanel extends Panel{
> >
> >   public MyPanel(String id, IModel fieldModel){
> >     super(id);
> >     add(new TextField("panelField", fieldModel));
> >     (...)
> >   }
> > }
> >
> > then I add the panel to the form (which has the MyModel as a
> > CompoundPropertyModel):
> >
> > add(new MyPanel("textPanel", new PropertyModel(this.getModelObject(), 
> > "text"))
> >
> > So the textfield within the panel should be associated with the "text"
> > property of the compoundProperty model (MyModel.getText).  Somehow I
> > feel I get something seriously wrong here.
> >
> > Thanks,
> >
> > Pieter
> >
> >
> >
> > 2007/6/13, Jean-Baptiste Quenot <[EMAIL PROTECTED]>:
> >
> >> * Pieter Cogghe:
> >>
> >>> Hi,
> >>>
> >>> (I'm new to Wicket and relatively new to Java so beware of stupid
> >>> questions and bad code)
> >>> I've got a form with a text input. I want it rendered like this:
> >>>
> >>> <form (...)>
> >>> (...)
> >>> <p>
> >>>   <label for="input_name">Name</label>
> >>>   <input type="text" id="input_name" name="name" />
> >>> </p>
> >>> (...)
> >>> </form>
> >>>
> >>> I want to write my own component, so I only have to write this
> >>> template html-code:
> >>>
> >>> <form wicket:id="input">
> >>> (...)
> >>> <p>
> >>>   <input type="text" wicket:id="name"  />
> >>> </p>
> >>> (...)
> >>> </form>
> >>>
> >>> The java code to add this to a page (TextFieldWithIdLabel of the
> >>> custom component)
> >>>
> >>> add(new TextFieldWithIdLabel("name").setLabel(new Model("Name")));
> >>>
> >>>
> >>> I'm not sure how to this, I started by extending TextField and
> >>> overwriting onTagComponent like this:
> >>>
> >>> protected void onComponentTag(ComponentTag tag){
> >>>       setOutputMarkupId(true);
> >>>       super.onComponentTag(tag)
> >>> }
> >>>
> >>> This works fine for the input-id, however I'm not sure how I can add
> >>> the label tag in front of it. Maybe I should write a custom panel?
> >>>
> >> A Panel would be nice, or otherwise there's a dirty hack to
> >> directly write tags into the response.
> >> --
> >>      Jean-Baptiste Quenot
> >> aka  John Banana   Qwerty
> >> http://caraldi.com/jbq/
> >>
> >> -------------------------------------------------------------------------
> >> This SF.net email is sponsored by DB2 Express
> >> Download DB2 Express C - the FREE version of DB2 express and take
> >> control of your XML. No limits. Just data. Click to get it now.
> >> http://sourceforge.net/powerbar/db2/
> >> _______________________________________________
> >> Wicket-user mailing list
> >> Wicket-user@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/wicket-user
> >>
> >>
> >
> >
> >
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>


-- 
Pieter Cogghe
Ganzendries 186
9000 Gent
0487 10 14 21

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to