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() &gt; 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() &gt; 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() &gt; 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() &gt; 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