Re: PropertyModel with default null model object ?

2008-05-04 Thread Per Newgro
Hello smallufo:

the onclick and the onbeforerender methods will be called if page is presented 
(or immidiatly before). But this
   myLink.add(new Image(hexagramImage , new
 ResourceReference(MyObject.class , icons/byIndex/+ new
 PropertyModel(model,index).getObject().toString()+.gif)));  //FAILED
will be called at custruction time of page. So there could be two possible 
causes for your problem.
1st: the bean which is assigned to panel model is null or 
2nd: the index in that bean is null.
1st solution: Assign a bean - if not possible make getMyObjectFromInts 
null-aware and return a default-image
2nd solution: Assign a standard value for index (int = 0)

I hope i got the issue - if not please ask again :-)
HTH
Per

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: PropertyModel with default null model object ?

2008-05-04 Thread smallufo
Thank you , I found a way to solve this :

myLink.add(new Image(hexagramImage , new PropertyModel(model , index)
{
  @Override
  public Object getObject()
  {
int index = ((Integer)super.getObject()).intValue();
return new ResourceReference(MyObject.class , icons/byIndex/+
index+.gif);
  }
}));

It seems working now...


2008/5/4 Per Newgro [EMAIL PROTECTED]:

 Hello smallufo:

 the onclick and the onbeforerender methods will be called if page is
 presented
 (or immidiatly before). But this
myLink.add(new Image(hexagramImage , new
  ResourceReference(MyObject.class , icons/byIndex/+ new
  PropertyModel(model,index).getObject().toString()+.gif)));  //FAILED
 will be called at custruction time of page. So there could be two possible
 causes for your problem.
 1st: the bean which is assigned to panel model is null or
 2nd: the index in that bean is null.
 1st solution: Assign a bean - if not possible make getMyObjectFromInts
 null-aware and return a default-image
 2nd solution: Assign a standard value for index (int = 0)

 I hope i got the issue - if not please ask again :-)
 HTH
 Per

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: PropertyModel with default null model object ?

2008-05-03 Thread smallufo
Thank you , I solve most of questions , except this :

In the MyPage extends WebPage :

//fieldX returns an Integer[] array
MyPanel myPanel = new MyPanel(myPanel , new PropertyModel(model ,
fieldX)
{
  @Override
  public Object getObject()
  {
Integer[] ints = (Integer[]) super.getObject();
return getMyObjectFromInts(ints);
  }
});
add(myPanel);



And in the MyPanel :

public MyPanel(String id, final IModel model)
{
  super(id , model);

  Link myLink = new Link(myLink)
  {
@Override
public void onClick()
{
  MapString , Object parameterMap = new HashMapString , Object();
  parameterMap.put(index ,  new PropertyModel(model ,
index).getObject().toString()); // OK
  parameterMap.put(locale , getSession().getLocale());
  PageParameters pps = new PageParameters(parameterMap);
  setResponsePage(HexagramPage.class , pps);
}

@Override
protected void onBeforeRender()
{
  super.onBeforeRender();
  add(new SimpleAttributeModifier(title , new PropertyModel(model ,
name).getObject().toString())); // , OK
}
  };

  //draw an Icon depending on index value
  myLink.add(new Image(hexagramImage , new
ResourceReference(MyObject.class , icons/byIndex/+ new
PropertyModel(model,index).getObject().toString()+.gif)));  //FAILED

Here ! it goes problem!
It will throw a NPE :
java.lang.NullPointerException
  at 
  at MyPage$2.getObject(MyPage.java:119)   the
getMyObjectFromInts() line
  at
org.apache.wicket.model.AbstractPropertyModel.getTarget(AbstractPropertyModel.java:187)
  at
org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:110)
  at MyPanel.init(MyPanel.java:49)  the ResourceReference line


As MyPage shows , I use getMyObjectFromInts() to transform fieldX's return
value to my custom object
And in MyPanel , I can successfully get myObject's index , name values , but
it fails at the last line!
It constructs a ResourceReference object by initializing a String , which
takes myObject's index value.
I use the same new PropertyModel(model,index).getObject().toString()  ,
successes first but fails second , why ?
How to solve this ?



2008/5/3 Per Newgro [EMAIL PROTECTED]:

 Hello smallufo:

  public class MyPanel extends Panel
  {
private MyObj myObj;
 
public MyPanel(String id , IModel model)
{
  super(id);
  this.myObj = (MyObj) model.getObject();
 
  add(new Label(xxx , myObj.getFieldX.toString()));
  add(new Label(yyy , myObj.getFieldY.toString()));
 
}
  }

 This is the problem. Don't store the instance in the panel. Use the
 provided
 model. The Labels can get their data by a PropertyModel related to that
 model.
  public class MyPanel extends Panel
  {
   // removed while not required private MyObj myObj;

   public MyPanel(String id , IModel model)
   {
  super(id, model); -- use this constructor
 // removed while not required this.myObj = (MyObj) model.getObject();

 // instead add(new Label(xxx , myObj.getFieldX.toString()));
 add(new Label(xxx , new PropertyModel(model, fieldX)));
 // instead add(new Label(yyy , myObj.getFieldY.toString()));
 add(new Label(yyy , new PropertyModel(model, fieldY)));
   }
  }

 You simply wire the models together. So a model related to view can't be
 null
 (instanciated in panel self). That's what i mean if i always say path to
 data. It's a description which properties have to be used to get the
 data.
 So the underlying business object can be null. The behavior if a null will
 be
 return will be determined by the component. A label for instance is
 displaying simply a blank. Textfield to.

 HTH
 Per

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: PropertyModel with default null model object ?

2008-05-02 Thread Per Newgro
The code you provided should work. The NPEs comes from within the Panel? So 
can you give us an example how you access the model in the panel (with an NPE 
throwing component)?

Cheers
Per

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: PropertyModel with default null model object ?

2008-05-02 Thread smallufo
Yes .
In the WebPage , I add MyPanel like this :

myPanel = new MyPanel(myPanel , new PropertyModel(this , myobj));
myPanel.setVisible(false);
myPanel.setOutputMarkupPlaceholderTag(true);
add(myPanel);

And in the MyPanel :

public class MyPanel extends Panel
{
  private MyObj myObj;

  public MyPanel(String id , IModel model)
  {
super(id);
this.myObj = (MyObj) model.getObject();

add(new Label(xxx , myObj.getFieldX.toString()));
add(new Label(yyy , myObj.getFieldY.toString()));

  }
}

Because myObj passed to MyPanel is initially null ,
In the MyPanel construction time , myObj.getFieldX , myObj.getFieldY will
throw NPEs here...

I don't know how to solve it .



2008/5/2 Per Newgro [EMAIL PROTECTED]:

 The code you provided should work. The NPEs comes from within the Panel?
 So
 can you give us an example how you access the model in the panel (with an
 NPE
 throwing component)?

 Cheers
 Per

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: PropertyModel with default null model object ?

2008-05-02 Thread Per Newgro
Hello smallufo:

 public class MyPanel extends Panel
 {
   private MyObj myObj;

   public MyPanel(String id , IModel model)
   {
 super(id);
 this.myObj = (MyObj) model.getObject();

 add(new Label(xxx , myObj.getFieldX.toString()));
 add(new Label(yyy , myObj.getFieldY.toString()));

   }
 }

This is the problem. Don't store the instance in the panel. Use the provided 
model. The Labels can get their data by a PropertyModel related to that 
model.
 public class MyPanel extends Panel
 {
  // removed while not required private MyObj myObj;

   public MyPanel(String id , IModel model)
   {
 super(id, model); -- use this constructor
 // removed while not required this.myObj = (MyObj) model.getObject();

 // instead add(new Label(xxx , myObj.getFieldX.toString()));
 add(new Label(xxx , new PropertyModel(model, fieldX)));
 // instead add(new Label(yyy , myObj.getFieldY.toString()));
 add(new Label(yyy , new PropertyModel(model, fieldY)));
   }
 }

You simply wire the models together. So a model related to view can't be null 
(instanciated in panel self). That's what i mean if i always say path to 
data. It's a description which properties have to be used to get the data. 
So the underlying business object can be null. The behavior if a null will be 
return will be determined by the component. A label for instance is 
displaying simply a blank. Textfield to.

HTH
Per

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: PropertyModel with default null model object ?

2008-05-02 Thread Martijn Dashorst
You can nest models and use a model as the value for a PropertyModel.
A PropertyModel knows how to cope with null values as it will return a
null. Components and the label component in particular will render an
empty string when the model value was found to be null.

So nest or chain your model inside PropertyModels:

add(new Label(xxx, new PropertyModel(model, fieldX)));
add(new Label(yyy, new PropertyModel(model, fieldY)));

Read the model documentation on the wiki [1]. Try to understand it and
commit it to your brain. Print the page, and put it under your pillow
at night. Read it while on the toilet, pin it to the side of your
monitor, stick it to your rear view mirror, print it on transparent
foil and stick it to the inside of your glasses.

Martijn

[1] 
http://cwiki.apache.org/WICKET/working-with-wicket-models.html#WorkingwithWicketmodels-Chainingmodels

On 5/2/08, smallufo [EMAIL PROTECTED] wrote:
 Yes .

 In the WebPage , I add MyPanel like this :

  myPanel = new MyPanel(myPanel , new PropertyModel(this , myobj));

 myPanel.setVisible(false);
  myPanel.setOutputMarkupPlaceholderTag(true);
  add(myPanel);


 And in the MyPanel :

  public class MyPanel extends Panel
  {
   private MyObj myObj;

   public MyPanel(String id , IModel model)
   {
 super(id);
 this.myObj = (MyObj) model.getObject();

 add(new Label(xxx , myObj.getFieldX.toString()));
 add(new Label(yyy , myObj.getFieldY.toString()));

   }
  }

  Because myObj passed to MyPanel is initially null ,
  In the MyPanel construction time , myObj.getFieldX , myObj.getFieldY will
  throw NPEs here...

  I don't know how to solve it .



  2008/5/2 Per Newgro [EMAIL PROTECTED]:


   The code you provided should work. The NPEs comes from within the Panel?
   So
   can you give us an example how you access the model in the panel (with an
   NPE
   throwing component)?
  
   Cheers
   Per
  
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
  
  



-- 
Buy Wicket in Action: http://manning.com/dashorst
Apache Wicket 1.3.3 is released
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: PropertyModel with default null model object ?

2008-05-02 Thread smallufo
A very good lesson learned.
Thanks to Per and Martijn very much..

2008/5/3 Martijn Dashorst [EMAIL PROTECTED]:

 You can nest models and use a model as the value for a PropertyModel.
 A PropertyModel knows how to cope with null values as it will return a
 null. Components and the label component in particular will render an
 empty string when the model value was found to be null.

 So nest or chain your model inside PropertyModels:

 add(new Label(xxx, new PropertyModel(model, fieldX)));
 add(new Label(yyy, new PropertyModel(model, fieldY)));

 Read the model documentation on the wiki [1]. Try to understand it and
 commit it to your brain. Print the page, and put it under your pillow
 at night. Read it while on the toilet, pin it to the side of your
 monitor, stick it to your rear view mirror, print it on transparent
 foil and stick it to the inside of your glasses.

 Martijn

 [1]
 http://cwiki.apache.org/WICKET/working-with-wicket-models.html#WorkingwithWicketmodels-Chainingmodels

 On 5/2/08, smallufo [EMAIL PROTECTED] wrote:
  Yes .
 
  In the WebPage , I add MyPanel like this :
 
   myPanel = new MyPanel(myPanel , new PropertyModel(this , myobj));
 
  myPanel.setVisible(false);
   myPanel.setOutputMarkupPlaceholderTag(true);
   add(myPanel);
 
 
  And in the MyPanel :
 
   public class MyPanel extends Panel
   {
private MyObj myObj;
 
public MyPanel(String id , IModel model)
{
  super(id);
  this.myObj = (MyObj) model.getObject();
 
  add(new Label(xxx , myObj.getFieldX.toString()));
  add(new Label(yyy , myObj.getFieldY.toString()));
 
}
   }
 
   Because myObj passed to MyPanel is initially null ,
   In the MyPanel construction time , myObj.getFieldX , myObj.getFieldY
 will
   throw NPEs here...
 
   I don't know how to solve it .
 
 
 
   2008/5/2 Per Newgro [EMAIL PROTECTED]:
 
 
The code you provided should work. The NPEs comes from within the
 Panel?
So
can you give us an example how you access the model in the panel
 (with an
NPE
throwing component)?
   
Cheers
Per
   
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
   
   
 


 --
 Buy Wicket in Action: http://manning.com/dashorst
 Apache Wicket 1.3.3 is released
 Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




PropertyModel with default null model object ?

2008-05-01 Thread smallufo
Sorry , this simple question bothers me a while , I don't know how to solve
it:

I have a MyObject model object , which is initially null.
MyPanel recevies the MyObject and prints it value field by field.


In the WebPage , I add MyPanel like this :

myPanel = new MyPanel(myPanel , new PropertyModel(this , myobj));
myPanel.setEscapeModelStrings(false);
myPanel.setVisible(false);
myPanel.setOutputMarkupPlaceholderTag(true);
add(myPanel);

The problem is , because myobj is initially null ,
it will be later instantiated (and myPanel will be later switch to visible).
And in the construction time , MyPanel will throw a lot of NPE ...

How to solve it ? Thanks a lot .