You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Igor Vaynberg <ig...@gmail.com> on 2010/07/21 07:05:06 UTC
new feature in trunk and branch: Component#onConfigure()
another new callback added to 1.4/trunk that is aimed at making life
easier when managing component states such as visibility, enabled,
etc.
/**
* Called once per request on components before they are about to be
rendered. This method
* should be used to configure such things as visibility and enabled flags.
* <p>
* Overrides must call {@code super.onInitialize()}, usually before
any other code
* </p>
* <p>
* NOTE: Component hierarchy should not be modified inside this
method, instead it should be
* done in {@link #onBeforeRender()}
* </p>
* <p>
* NOTE: Why this method is preferrable to directly overriding {@link
#isVisible()} and
* {@link #isEnabled()}? Because those methods are called multiple
times even for processing of
* a single request. If they contain expensive logic they can slow
down the response time of the
* entire page. Further, overriding those methods directly on form
components may lead to
* inconsistent or unexpected state depending on when those methods
are called in the form
* processing workflow. It is a better practice to push changes to
state rather than pull.
* </p>
* <p>
* NOTE: If component's visibility or another property depends on
another component you may call
* {@code other.configure()} followed by {@code other.isVisible()} as
mentioned in
* {@link #configure()} javadoc.
* </p>
* <p>
* NOTE: Why should {@link #onBeforeRender()} not be used for this?
Because if visibility of a
* component is toggled inside {@link #onBeforeRender()} another
method needs to be overridden
* to make sure {@link #onBeforeRender()} will be invoked on ivisible
components:
*
* <pre>
* class MyComponent extends WebComponent
* {
* protected void onBeforeRender()
* {
* setVisible(Math.rand() > 0.5f);
* super.onBeforeRender();
* }
*
* // if this override is forgotten, once invisible component will
never become visible
* protected boolean callOnBeforeRenderIfNotVisible()
* {
* return true;
* }
* }
* </pre>
*
* VS
*
* <pre>
* class MyComponent extends WebComponent
* {
* protected void onConfigure()
* {
* setVisible(Math.rand() > 0.5f);
* super.onConfigure();
* }
* }
* </pre>
*/
protected void onConfigure()
{
}
/**
* Triggers {@link #onConfigure()} to be invoked on this component if
it has not already during
* this request.
* <p>
* This method should be invoked before any calls to {@link #isVisible()} or
* {@link #isEnabled()}. Usually this method will be called by the
framework before the
* component is rendered and so users should not need to call it;
however, in cases where
* visibility or enabled or other state of one component depends on
the state of another this
* method should be manually invoked on the other component by the
user. EG to link visiliby of
* two markup containers the following should be done:
*
* <pre>
* final WebMarkupContainer source=new WebMarkupContainer("a") {
* protected void onConfigure() {
* setVisible(Math.rand()>0.5f);
* }
* };
*
* WebMarkupContainer linked=new WebMarkupContainer("b") {
* protected void onConfigure() {
* source.configure(); // make sure source is configured
* setVisible(source.isVisible());
* }
* }
* </pre>
*
* </p>
*/
public final void configure()
{
if (!getFlag(FLAG_CONFIGURED))
{
onConfigure();
setFlag(FLAG_CONFIGURED, true);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: new feature in trunk and branch: Component#onConfigure()
Posted by Igor Vaynberg <ig...@gmail.com>.
its already deprecated
-igor
On Tue, Jul 20, 2010 at 11:46 PM, Johan Compagner <jc...@gmail.com> wrote:
> can we now deprecate protected boolean callOnBeforeRenderIfNotVisible() ??
>
> because you could do it now in onConfigure right?
> I hate multiply things do do the same thing :(
>
> On Wed, Jul 21, 2010 at 07:05, Igor Vaynberg <ig...@gmail.com> wrote:
>> protected boolean callOnBeforeRenderIfNotVisible()
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: new feature in trunk and branch: Component#onConfigure()
Posted by Johan Compagner <jc...@gmail.com>.
can we now deprecate protected boolean callOnBeforeRenderIfNotVisible() ??
because you could do it now in onConfigure right?
I hate multiply things do do the same thing :(
On Wed, Jul 21, 2010 at 07:05, Igor Vaynberg <ig...@gmail.com> wrote:
> protected boolean callOnBeforeRenderIfNotVisible()
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: new feature in trunk and branch: Component#onConfigure()
Posted by vineet semwal <vi...@gmail.com>.
very nice feature,
thank you !!
On Wed, Jul 21, 2010 at 10:35 AM, Igor Vaynberg <ig...@gmail.com>wrote:
> another new callback added to 1.4/trunk that is aimed at making life
> easier when managing component states such as visibility, enabled,
> etc.
>
> /**
> * Called once per request on components before they are about to be
> rendered. This method
> * should be used to configure such things as visibility and enabled
> flags.
> * <p>
> * Overrides must call {@code super.onInitialize()}, usually before
> any other code
> * </p>
> * <p>
> * NOTE: Component hierarchy should not be modified inside this
> method, instead it should be
> * done in {@link #onBeforeRender()}
> * </p>
> * <p>
> * NOTE: Why this method is preferrable to directly overriding
> {@link
> #isVisible()} and
> * {@link #isEnabled()}? Because those methods are called multiple
> times even for processing of
> * a single request. If they contain expensive logic they can slow
> down the response time of the
> * entire page. Further, overriding those methods directly on form
> components may lead to
> * inconsistent or unexpected state depending on when those methods
> are called in the form
> * processing workflow. It is a better practice to push changes to
> state rather than pull.
> * </p>
> * <p>
> * NOTE: If component's visibility or another property depends on
> another component you may call
> * {@code other.configure()} followed by {@code other.isVisible()}
> as
> mentioned in
> * {@link #configure()} javadoc.
> * </p>
> * <p>
> * NOTE: Why should {@link #onBeforeRender()} not be used for this?
> Because if visibility of a
> * component is toggled inside {@link #onBeforeRender()} another
> method needs to be overridden
> * to make sure {@link #onBeforeRender()} will be invoked on
> ivisible
> components:
> *
> * <pre>
> * class MyComponent extends WebComponent
> * {
> * protected void onBeforeRender()
> * {
> * setVisible(Math.rand() > 0.5f);
> * super.onBeforeRender();
> * }
> *
> * // if this override is forgotten, once invisible component
> will
> never become visible
> * protected boolean callOnBeforeRenderIfNotVisible()
> * {
> * return true;
> * }
> * }
> * </pre>
> *
> * VS
> *
> * <pre>
> * class MyComponent extends WebComponent
> * {
> * protected void onConfigure()
> * {
> * setVisible(Math.rand() > 0.5f);
> * super.onConfigure();
> * }
> * }
> * </pre>
> */
> protected void onConfigure()
> {
>
> }
>
> /**
> * Triggers {@link #onConfigure()} to be invoked on this component
> if
> it has not already during
> * this request.
> * <p>
> * This method should be invoked before any calls to {@link
> #isVisible()} or
> * {@link #isEnabled()}. Usually this method will be called by the
> framework before the
> * component is rendered and so users should not need to call it;
> however, in cases where
> * visibility or enabled or other state of one component depends on
> the state of another this
> * method should be manually invoked on the other component by the
> user. EG to link visiliby of
> * two markup containers the following should be done:
> *
> * <pre>
> * final WebMarkupContainer source=new WebMarkupContainer("a") {
> * protected void onConfigure() {
> * setVisible(Math.rand()>0.5f);
> * }
> * };
> *
> * WebMarkupContainer linked=new WebMarkupContainer("b") {
> * protected void onConfigure() {
> * source.configure(); // make sure source is
> configured
> * setVisible(source.isVisible());
> * }
> * }
> * </pre>
> *
> * </p>
> */
> public final void configure()
> {
> if (!getFlag(FLAG_CONFIGURED))
> {
> onConfigure();
> setFlag(FLAG_CONFIGURED, true);
> }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
--
regards,
Vineet Semwal
Re: new feature in trunk and branch: Component#onConfigure()
Posted by Ernesto Reinaldo Barreiro <re...@gmail.com>.
Igor,
Thanks for the new feature!
>
> /**
> * Called once per request on components before they are about to be
> rendered. This method
> * should be used to configure such things as visibility and enabled flags.
> * <p>
> * Overrides must call {@code super.onInitialize()}, usually before
> any other code
> * </p>
Should not this be {@code super.onConfigure()}?
Cheers,
Ernesto
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: new feature in trunk and branch: Component#onConfigure()
Posted by Erik van Oosten <e....@grons.nl>.
Excellent!
Op 21-07-10 07:05, Igor Vaynberg wrote:
> another new callback added to 1.4/trunk that is aimed at making life
> easier when managing component states such as visibility, enabled,
> etc.
> ....
>
>
--
Erik van Oosten
http://www.day-to-day-stuff.blogspot.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org