Re: [Wicket-user] Changing tag attributes

2006-09-05 Thread Eelco Hillenius
> I guess I still don't understand when models need to be used and when
> simple values are ok.

My simplified answer would be:

* Models are partially managed by Wicket. E.g. CompoundPropertyModels
can be found by model-less children, and Wicket takes care of
detaching all models after rendering is done.
* You can reuse models for different components. So you use
composition rather then inheritance, which is more flexible.
* Models are the expected connection to data with Wicket. As most
components do use models, designing your components such that they do
too is consistent and will probably make them easier to understand by
new users.

If you don't care about the above items for a specific case, it's fine
to not use a model. It's not an anti-pattern. :)

Eelco

-
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] Changing tag attributes

2006-09-05 Thread David Leangen

> hope this helps some, or at least not make things worse :)

He he...

Yeah, thank you.

Is there any way of telling easily which components are stateful (and
therefore need models) and which are not?




On Tue, 2006-09-05 at 00:19 -0700, Igor Vaynberg wrote:
> models are needed because components are stateful. if a component
> lives across requests and data changes the component needs a way to
> display fresh data. this is where the models come in - they allow a
> component to retrieve fresh data. 
> 
> consider the listview - in populate item you create a bunch of labels.
> in the end of request all these labels are disacarded and in the
> beginning of the request these labels are recreated. no need for
> models there because a label doesnt live across requests. 
> 
> now consider the same listview but with reuseitems set to true - that
> means that a label created in populateitem() can potentially live
> across a few requests. now consider this listview is showing a list of
> usernames. at the top of the list is "Bob". user1 is looking at the
> list of users, meanwhile user2 renames "Bob" to "Rob". user1 refreshes
> the page - now if the label used to show the username had no model
> that can refresh itself it would still show "Bob", but if a label had
> a detachable model it would show "Rob" because on the later request
> model.getObject() would return the updated value because it would
> requery the database.
> 
> hope this helps some, or at least not make things worse :)
> 
> -Igor
> 
> 
> 
> 
> On 9/4/06, David Leangen <[EMAIL PROTECTED]> wrote:
> 
> You're absolutely right! That worked. Thanks!
> 
> I guess I still don't understand when models need to be used
> and when
> simple values are ok.
> 
> 
> Can somebody explain this to me, or point out some docs?
> 
> 
> Thank you!
> 
> 
> 
> 
> On Tue, 2006-09-05 at 12:13 +0530, karthik Guru wrote:
> > I think having a PropertyModel to access 'isSuccessful'
> seems complicated.
> > May be something like this ?
> >
> > public class TestLabel extends Label {
> >
> >boolean isSuccessful;
> >
> >public TestLabel( final String id, final String
> label,boolean isSuccessful){
> >  super( id, label);
> >   this.isSuccessful= isSuccessful;
> >}
> >
> >@Override
> >protected void onComponentTag( final ComponentTag tag ){
> >  super.onComponentTag( tag );
> >  final ValueMap map = tag.getAttributes ();
> >  map.put( "class", getLabelTagClass( isSuccessful ) );
> >}
> > }
> >
> > On 9/5/06, David Leangen <[EMAIL PROTECTED]> wrote:
> > >
> > > This is exactly what I need. Thanks!
> > >
> > > Now, to make the code a bit cleaner in my repeater, I'd
> like to subclass
> > > Label, overriding the onComponentTag(ComponentTag) method.
> I'm a big 
> > > confused again regarding models...
> > >
> > > This is the mess I created, which does not work. The part
> that confuses
> > > me the most is the use of the property model in the
> subclasses Label. 
> > >
> > >
> > >   public class TestLabel
> > > extends Label
> > >   {
> > > private static final long serialVersionUID = 1L;
> > > private PropertyModel m_isSuccessfulPropertyModel; 
> > >
> > > public TestLabel( final String id, final String label,
> final
> > > PropertyModel propModel )
> > > {
> > >   super( id, label );
> > >   m_isSuccessfulPropertyModel = propModel; 
> > > }
> > >
> > > @Override
> > > protected void onComponentTag( final ComponentTag
> tag )
> > > {
> > >   super.onComponentTag( tag );
> > >   final ValueMap map = tag.getAttributes();
> > >   final boolean isSuccessful =
> > > (Boolean)m_isSuccessfulPropertyModel.getObject( this );
> > >   map.put( "class",
> getLabelTagClass( isSuccessful ) );
> > > }
> > >   }
> > >
> > >
> > > And I populate my item in the repeater like this.
> > >
> > >   add(
> > > new DataView( "testResults", new
> > > TestResultDataProvider( testResults ) ) 
> > > {
> > >   private static final long serialVersionUID = 1L;
> > >   private boolean m_isSuccessful = true;
> > >
> > >   public void populateItem( final Item item ) 
> > >   {
> > > final TestResult testResult =
> (TestR

Re: [Wicket-user] Changing tag attributes

2006-09-05 Thread Igor Vaynberg
models are needed because components are stateful. if a component lives across requests and data changes the component needs a way to display fresh data. this is where the models come in - they allow a component to retrieve fresh data.
consider the listview - in populate item you create a bunch of labels. in the end of request all these labels are disacarded and in the beginning of the request these labels are recreated. no need for models there because a label doesnt live across requests.
now consider the same listview but with reuseitems set to true - that means that a label created in populateitem() can potentially live across a few requests. now consider this listview is showing a list of usernames. at the top of the list is "Bob". user1 is looking at the list of users, meanwhile user2 renames "Bob" to "Rob". user1 refreshes the page - now if the label used to show the username had no model that can refresh itself it would still show "Bob", but if a label had a detachable model it would show "Rob" because on the later request 
model.getObject() would return the updated value because it would requery the database.hope this helps some, or at least not make things worse :)-IgorOn 9/4/06, 
David Leangen <[EMAIL PROTECTED]> wrote:
You're absolutely right! That worked. Thanks!I guess I still don't understand when models need to be used and whensimple values are ok.Can somebody explain this to me, or point out some docs?
Thank you!On Tue, 2006-09-05 at 12:13 +0530, karthik Guru wrote:> I think having a PropertyModel to access 'isSuccessful' seems complicated.> May be something like this ?>
> public class TestLabel extends Label {>>boolean isSuccessful;>>public TestLabel( final String id, final String label,boolean isSuccessful){>  super( id, label);>  
this.isSuccessful= isSuccessful;>}>>@Override>protected void onComponentTag( final ComponentTag tag ){>  super.onComponentTag( tag );>  final ValueMap map = tag.getAttributes
();>  map.put( "class", getLabelTagClass( isSuccessful ) );>}> }>> On 9/5/06, David Leangen <[EMAIL PROTECTED]> wrote:
> >> > This is exactly what I need. Thanks!> >> > Now, to make the code a bit cleaner in my repeater, I'd like to subclass> > Label, overriding the onComponentTag(ComponentTag) method. I'm a big
> > confused again regarding models...> >> > This is the mess I created, which does not work. The part that confuses> > me the most is the use of the property model in the subclasses Label.
> >> >> >   public class TestLabel> > extends Label> >   {> > private static final long serialVersionUID = 1L;> > private PropertyModel m_isSuccessfulPropertyModel;
> >> > public TestLabel( final String id, final String label, final> > PropertyModel propModel )> > {> >   super( id, label );> >   m_isSuccessfulPropertyModel = propModel;
> > }> >> > @Override> > protected void onComponentTag( final ComponentTag tag )> > {> >   super.onComponentTag( tag );> >   final ValueMap map = 
tag.getAttributes();> >   final boolean isSuccessful => > (Boolean)m_isSuccessfulPropertyModel.getObject( this );> >   map.put( "class", getLabelTagClass( isSuccessful ) );
> > }> >   }> >> >> > And I populate my item in the repeater like this.> >> >   add(> > new DataView( "testResults", new> > TestResultDataProvider( testResults ) )
> > {> >   private static final long serialVersionUID = 1L;> >   private boolean m_isSuccessful = true;> >> >   public void populateItem( final Item item )
> >   {> > final TestResult testResult = (TestResult)item.getModelObject();> > final boolean isSuccessful = testResult.isSuccessful();> > setSuccessful( isSuccessful );
> > final PropertyModel isSuccessfulPropertyModel = new> > PropertyModel( this, "isSuccessful" );> > final Date lastTimeExecuted = new> > Date( testResult.getLastTimeExecuted
() );> > final Long testDuration = testResult.getExecutionTime();> > item.add( new TestLabel( "test.name", testResult.getName(),> > isSuccessfulPropertyModel ) );
> >   }> >> >   public void setSuccessful( final boolean isSuccessful )> >   {> > m_isSuccessful = isSuccessful;> >   }> >> >   public boolean isSuccessful()
> >   {> > return m_isSuccessful;> >   }> > }> >   );> >> >> > What am I missing here?> >> >> >
> >> > On Mon, 2006-09-04 at 19:17 -0700, Igor Vaynberg wrote:> > > you can either override oncomponenttag(ComponentTag tag)> > > { tag.getAttributes().get/put } or add a behavior to the component -
> > > namely an (Simple)AttributeModifier.> > >> > > -Igor> > >> > >> > > On 9/4/06, David Leangen <[EMAIL PROTECTED]
> wrote:> > >> > > Could somebody please point me to an example or reference on> > > how to> > > dynamically change tag attributes? I don't recall offhand.
> > >> > > I'm trying to do something like this:> > >> >

Re: [Wicket-user] Changing tag attributes

2006-09-05 Thread David Leangen

You're absolutely right! That worked. Thanks!

I guess I still don't understand when models need to be used and when
simple values are ok.


Can somebody explain this to me, or point out some docs?


Thank you!




On Tue, 2006-09-05 at 12:13 +0530, karthik Guru wrote:
> I think having a PropertyModel to access 'isSuccessful' seems complicated.
> May be something like this ?
> 
> public class TestLabel extends Label {
> 
>boolean isSuccessful;
> 
>public TestLabel( final String id, final String label,boolean 
> isSuccessful){
>  super( id, label);
>  this.isSuccessful= isSuccessful;
>}
> 
>@Override
>protected void onComponentTag( final ComponentTag tag ){
>  super.onComponentTag( tag );
>  final ValueMap map = tag.getAttributes();
>  map.put( "class", getLabelTagClass( isSuccessful ) );
>}
> }
> 
> On 9/5/06, David Leangen <[EMAIL PROTECTED]> wrote:
> >
> > This is exactly what I need. Thanks!
> >
> > Now, to make the code a bit cleaner in my repeater, I'd like to subclass
> > Label, overriding the onComponentTag(ComponentTag) method. I'm a big
> > confused again regarding models...
> >
> > This is the mess I created, which does not work. The part that confuses
> > me the most is the use of the property model in the subclasses Label.
> >
> >
> >   public class TestLabel
> > extends Label
> >   {
> > private static final long serialVersionUID = 1L;
> > private PropertyModel m_isSuccessfulPropertyModel;
> >
> > public TestLabel( final String id, final String label, final
> > PropertyModel propModel )
> > {
> >   super( id, label );
> >   m_isSuccessfulPropertyModel = propModel;
> > }
> >
> > @Override
> > protected void onComponentTag( final ComponentTag tag )
> > {
> >   super.onComponentTag( tag );
> >   final ValueMap map = tag.getAttributes();
> >   final boolean isSuccessful =
> > (Boolean)m_isSuccessfulPropertyModel.getObject( this );
> >   map.put( "class", getLabelTagClass( isSuccessful ) );
> > }
> >   }
> >
> >
> > And I populate my item in the repeater like this.
> >
> >   add(
> > new DataView( "testResults", new
> > TestResultDataProvider( testResults ) )
> > {
> >   private static final long serialVersionUID = 1L;
> >   private boolean m_isSuccessful = true;
> >
> >   public void populateItem( final Item item )
> >   {
> > final TestResult testResult = (TestResult)item.getModelObject();
> > final boolean isSuccessful = testResult.isSuccessful();
> > setSuccessful( isSuccessful );
> > final PropertyModel isSuccessfulPropertyModel = new
> > PropertyModel( this, "isSuccessful" );
> > final Date lastTimeExecuted = new
> > Date( testResult.getLastTimeExecuted() );
> > final Long testDuration = testResult.getExecutionTime();
> > item.add( new TestLabel( "test.name", testResult.getName(),
> > isSuccessfulPropertyModel ) );
> >   }
> >
> >   public void setSuccessful( final boolean isSuccessful )
> >   {
> > m_isSuccessful = isSuccessful;
> >   }
> >
> >   public boolean isSuccessful()
> >   {
> > return m_isSuccessful;
> >   }
> > }
> >   );
> >
> >
> > What am I missing here?
> >
> >
> >
> >
> > On Mon, 2006-09-04 at 19:17 -0700, Igor Vaynberg wrote:
> > > you can either override oncomponenttag(ComponentTag tag)
> > > { tag.getAttributes().get/put } or add a behavior to the component -
> > > namely an (Simple)AttributeModifier.
> > >
> > > -Igor
> > >
> > >
> > > On 9/4/06, David Leangen <[EMAIL PROTECTED]> wrote:
> > >
> > > Could somebody please point me to an example or reference on
> > > how to
> > > dynamically change tag attributes? I don't recall offhand.
> > >
> > > I'm trying to do something like this:
> > >
> > > If no error:
> > > Righto!
> > >
> > > Or if error:
> > > Sorry, try again!
> > >
> > >
> > > Thanks!
> > >
> > >
> > >
> > > 
> > > -
> > > Using Tomcat but need to do more? Need to support web
> > > services, security?
> > > Get stuff done quickly with pre-integrated technology to make
> > > your job easier
> > > Download IBM WebSphere Application Server v.1.0.1 based on
> > > Apache Geronimo
> > > 
> > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> > > ___
> > > Wicket-user mailing list
> > > Wicket-user@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/wicket-user
> > >
> > > -
> > > Using Tomcat but need to do more? Need to support web services, security?
> > > Get stuff done quickly with pre-integrated technology to make your job 
> > > 

Re: [Wicket-user] Changing tag attributes

2006-09-04 Thread David Leangen

This is exactly what I need. Thanks!

Now, to make the code a bit cleaner in my repeater, I'd like to subclass
Label, overriding the onComponentTag(ComponentTag) method. I'm a big
confused again regarding models...

This is the mess I created, which does not work. The part that confuses
me the most is the use of the property model in the subclasses Label.


  public class TestLabel
extends Label
  {
private static final long serialVersionUID = 1L;
private PropertyModel m_isSuccessfulPropertyModel;

public TestLabel( final String id, final String label, final
PropertyModel propModel )
{
  super( id, label );
  m_isSuccessfulPropertyModel = propModel;
}

@Override
protected void onComponentTag( final ComponentTag tag )
{
  super.onComponentTag( tag );
  final ValueMap map = tag.getAttributes();
  final boolean isSuccessful =
(Boolean)m_isSuccessfulPropertyModel.getObject( this );
  map.put( "class", getLabelTagClass( isSuccessful ) );
}
  }


And I populate my item in the repeater like this.

  add(
new DataView( "testResults", new
TestResultDataProvider( testResults ) )
{
  private static final long serialVersionUID = 1L;
  private boolean m_isSuccessful = true;

  public void populateItem( final Item item )
  {
final TestResult testResult = (TestResult)item.getModelObject();
final boolean isSuccessful = testResult.isSuccessful();
setSuccessful( isSuccessful );
final PropertyModel isSuccessfulPropertyModel = new
PropertyModel( this, "isSuccessful" );
final Date lastTimeExecuted = new
Date( testResult.getLastTimeExecuted() );
final Long testDuration = testResult.getExecutionTime();
item.add( new TestLabel( "test.name", testResult.getName(),
isSuccessfulPropertyModel ) );
  }

  public void setSuccessful( final boolean isSuccessful )
  {
m_isSuccessful = isSuccessful;
  }

  public boolean isSuccessful()
  {
return m_isSuccessful;
  }
}
  );


What am I missing here?




On Mon, 2006-09-04 at 19:17 -0700, Igor Vaynberg wrote:
> you can either override oncomponenttag(ComponentTag tag)
> { tag.getAttributes().get/put } or add a behavior to the component -
> namely an (Simple)AttributeModifier.
> 
> -Igor
> 
> 
> On 9/4/06, David Leangen <[EMAIL PROTECTED]> wrote:
> 
> Could somebody please point me to an example or reference on
> how to
> dynamically change tag attributes? I don't recall offhand.
> 
> I'm trying to do something like this:
> 
> If no error:
> Righto! 
> 
> Or if error:
> Sorry, try again!
> 
> 
> Thanks!
> 
> 
> 
> 
> -
> Using Tomcat but need to do more? Need to support web
> services, security? 
> Get stuff done quickly with pre-integrated technology to make
> your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on
> Apache Geronimo
> 
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> ___
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> 
> -
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> ___ Wicket-user mailing list 
> Wicket-user@lists.sourceforge.net 
> https://lists.sourceforge.net/lists/listinfo/wicket-user


-
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] Changing tag attributes

2006-09-04 Thread Igor Vaynberg
you can either override oncomponenttag(ComponentTag tag) { tag.getAttributes().get/put } or add a behavior to the component - namely an (Simple)AttributeModifier.-IgorOn 9/4/06, 
David Leangen <[EMAIL PROTECTED]> wrote:
Could somebody please point me to an example or reference on how todynamically change tag attributes? I don't recall offhand.I'm trying to do something like this:If no error:Righto!
Or if error:Sorry, try again!Thanks!-Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easierDownload IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642___Wicket-user mailing list
Wicket-user@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/wicket-user
-
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user