On Sun, Nov 25, 2012 at 7:14 PM, Martin Grigorov <mgrigo...@apache.org>wrote:

> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> index 3071875..0651c33 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> @@ -21,6 +21,7 @@ import
> org.apache.wicket.core.util.string.JavaScriptUtils;
>  import org.apache.wicket.markup.head.IHeaderResponse;
>  import org.apache.wicket.markup.head.JavaScriptHeaderItem;
>  import org.apache.wicket.markup.head.OnLoadHeaderItem;
> +import org.apache.wicket.markup.html.WebPage;
>  import org.apache.wicket.request.http.WebRequest;
>  import org.apache.wicket.util.time.Duration;
>
> @@ -127,15 +128,25 @@ public abstract class AbstractAjaxTimerBehavior
> extends AbstractDefaultAjaxBehav
>         @Override
>         protected final void respond(final AjaxRequestTarget target)
>         {
> -               if (!isStopped() && isEnabled(getComponent()))
> +               if (shouldTrigger())
>                  {
>                         onTimer(target);
>
> -                       target.getHeaderResponse().render(
> -
> OnLoadHeaderItem.forScript(getJsTimeoutCall(updateInterval)));
> +                       if (true || shouldTrigger())
>

Without the 'true ||'.


> +                       {
> +                               target.getHeaderResponse().render(
> +
> OnLoadHeaderItem.forScript(getJsTimeoutCall(updateInterval)));
> +                       }
>                 }
>         }
>
> +       private boolean shouldTrigger()
> +       {
> +               return isStopped() == false &&
> +                               isEnabled(getComponent()) &&
> +                               getComponent().findParent(WebPage.class)
> != null;
> +       }
> +
>         /**
>
>
>
> On Sun, Nov 25, 2012 at 7:07 PM, Sven Meier <s...@meiers.net> wrote:
>
>> Of course the component should be added to the ART.
>> But the example already fails when the behavior tries to write out the
>> next timeout after #onTimer().
>>
>> This is why I think it should re-check #isStopped(), since the user might
>> stop the timer in #onTimer().
>>
>> I'll take a look at WICKET-4886.
>>
>> Sven
>>
>>
>> On 11/25/2012 06:58 PM, Martin Grigorov wrote:
>>
>>> I see now what Sven meant with the second check for isStopped().
>>>
>>> But additionally I see that the quickstart is very broken.
>>>
>>> PanelOne does:
>>> form.add(new AbstractAjaxTimerBehavior(**Duration.seconds(5)) {
>>>              @Override
>>>              protected void onTimer(AjaxRequestTarget target) {
>>>                  PanelTwo two = new PanelTwo("panel");
>>>                  wmc.addOrReplace(two);
>>>              }
>>>          });
>>>
>>> But it doesn't use 'target' to repaint any component, so the registered
>>> JS
>>> timer continues with its original Url which uses the old pageId and
>>> component path to PanelOne. And as expected the second call triggered by
>>> the obsolete timer fails with "The behavior's component (a Form which is
>>> no
>>> more connected to the Page) cannot find its page.
>>> This is a plain error in the application.
>>>
>>>
>>>
>>> On Sun, Nov 25, 2012 at 6:34 PM, Oliver Zemann <oliver.zem...@gmail.com>
>>> **wrote:
>>>
>>>  As suggested i created the JIRA issue https://issues.apache.org/**
>>>> jira/browse/WICKET-4886<https:**//issues.apache.org/jira/**
>>>> browse/WICKET-4886 <https://issues.apache.org/jira/browse/WICKET-4886>>
>>>>
>>>> I will test the diff tomorrow.
>>>>
>>>> Am 25.11.2012 15:41, schrieb Martin Grigorov:
>>>>
>>>>  Hi,
>>>>>
>>>>>
>>>>> On Sun, Nov 25, 2012 at 9:51 AM, Sven Meier <s...@meiers.net> wrote:
>>>>>
>>>>>   Make a copy of AbstractAjaxTimerBehavior and let it be stoppable from
>>>>>
>>>>>> onTimer():
>>>>>>
>>>>>> diff --git a/wicket-core/src/main/java/****
>>>>>> **org/apache/wicket/ajax/****
>>>>>> AbstractAjaxTimerBehavior.java
>>>>>> b/wicket-core/src/main/java/******org/apache/wicket/ajax/**
>>>>>> AbstractAjaxTimerBehavior.java
>>>>>> index 3071875..b982a39 100644
>>>>>> --- a/wicket-core/src/main/java/******org/apache/wicket/ajax/**
>>>>>> AbstractAjaxTimerBehavior.java
>>>>>> +++ b/wicket-core/src/main/java/******org/apache/wicket/ajax/**
>>>>>>
>>>>>>
>>>>>> AbstractAjaxTimerBehavior.java
>>>>>> @@ -131,8 +131,11 @@
>>>>>>            {
>>>>>>                onTimer(target);
>>>>>>
>>>>>> -            target.getHeaderResponse().******render(
>>>>>> - OnLoadHeaderItem.forScript(******getJsTimeoutCall(******
>>>>>> updateInterval)));
>>>>>>
>>>>>> +            if (!isStopped())
>>>>>>
>>>>>>   But this code is already in : if (!isStopped() &&
>>>>>>
>>>>> isEnabled(getComponent()))
>>>>> How the second "if (!isStopped())" fixes the issue ?
>>>>>
>>>>>
>>>>>   +            {
>>>>>
>>>>>> +                target.getHeaderResponse().******render(
>>>>>> + OnLoadHeaderItem.forScript(******getJsTimeoutCall(******
>>>>>> updateInterval)));
>>>>>>
>>>>>>
>>>>>> +            }
>>>>>>            }
>>>>>>        }
>>>>>>
>>>>>> You could create a jira issue too.
>>>>>>
>>>>>>  Additionally there are two global Ajax listeners at the bottom of
>>>>> wicket-ajax-jquery.js which purpose is to remove any obsolete timers.
>>>>> I haven't debugged the application so I'm not sure where exactly is the
>>>>> problem.
>>>>>
>>>>>
>>>>>
>>>>>  Sven
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 11/25/2012 01:13 AM, Oliver Zemann wrote:
>>>>>>
>>>>>>   Unfortunately this is not a solution as i have about 30 different
>>>>>>
>>>>>>> panels.
>>>>>>> And i guess at least 10 of them should later use JS. With the
>>>>>>> approach
>>>>>>> you
>>>>>>> suggested i would have to check which panel should be displayed and
>>>>>>> load
>>>>>>> that (switch/case with 10 different panels). I guess that would also
>>>>>>> lead
>>>>>>> in heavy mixing the panels with the HomePage (BasePage) (destroying
>>>>>>> reusability).
>>>>>>>
>>>>>>> There is also no way for me to create a "flow based" dialogue as
>>>>>>> this is
>>>>>>> done in the backend controller which only tells me which panel to
>>>>>>> load.
>>>>>>>
>>>>>>> So there is no other way to go?
>>>>>>>
>>>>>>> Am 24.11.2012 22:57, schrieb Sven Meier:
>>>>>>>
>>>>>>>   After the timer has fired, AbstractAjaxTimerBehavior automatically
>>>>>>>
>>>>>>>> registers another timeout for the form inside PanelOne.
>>>>>>>> But at that point PanelOne is no longer in the component tree, it's
>>>>>>>> replaced by PanelTwo already.
>>>>>>>>
>>>>>>>> I'd recommend adding the behavor to the container instead:
>>>>>>>>
>>>>>>>>           final WebMarkupContainer wmc = new
>>>>>>>> WebMarkupContainer("container"
>>>>>>>> **);
>>>>>>>>           wmc.add(new AbstractAjaxTimerBehavior(******
>>>>>>>> Duration.seconds(5))
>>>>>>>>
>>>>>>>> {
>>>>>>>>
>>>>>>>>               @Override
>>>>>>>>               protected void onTimer(AjaxRequestTarget target) {
>>>>>>>>                   PanelTwo two = new PanelTwo("panel");
>>>>>>>>                   wmc.addOrReplace(two);
>>>>>>>>                   target.add(wmc);
>>>>>>>>
>>>>>>>>                   stop(target);
>>>>>>>>               }
>>>>>>>>           });
>>>>>>>>           add(wmc);
>>>>>>>>
>>>>>>>>           wmc.add(new PanelOne("panel"));
>>>>>>>>
>>>>>>>> This way you won't have to pass 'wmc' to PanelOne any longer.
>>>>>>>>
>>>>>>>> Sven
>>>>>>>>
>>>>>>>> On 11/24/2012 10:04 PM, Oliver Zemann wrote:
>>>>>>>>
>>>>>>>>   The problem is that this leads to a Page not found error. The
>>>>>>>> problem
>>>>>>>>
>>>>>>>>> is that the Panel which should be replaced is still looked up in
>>>>>>>>> the
>>>>>>>>> findPage() method. But findPage() returns null on that component,
>>>>>>>>> so
>>>>>>>>> this
>>>>>>>>> error is thrown.
>>>>>>>>>
>>>>>>>>> Am 24.11.2012 21:48, schrieb Sven Meier:
>>>>>>>>>
>>>>>>>>>   What is the problem?
>>>>>>>>>
>>>>>>>>>> Sven
>>>>>>>>>>
>>>>>>>>>> On 11/24/2012 08:22 PM, Oliver Zemann wrote:
>>>>>>>>>>
>>>>>>>>>>   Hi,
>>>>>>>>>>
>>>>>>>>>>> i created a small wicket application to show my problem:
>>>>>>>>>>> https://github.com/olze/******WicketPanelReplace<https://github.com/olze/****WicketPanelReplace>
>>>>>>>>>>> <https://**github.com/olze/****WicketPanelReplace<https://github.com/olze/**WicketPanelReplace>
>>>>>>>>>>> >
>>>>>>>>>>> <https://**github.com/olze/****WicketPanelReplace<http://github.com/olze/**WicketPanelReplace>
>>>>>>>>>>> <https://**github.com/olze/**WicketPanelReplace<https://github.com/olze/WicketPanelReplace>
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> The first panel gets displayed, after a few seconds it should be
>>>>>>>>>>> replaced by the second panel. Is there any way to achieve this
>>>>>>>>>>> behavior
>>>>>>>>>>> with that kind of architecture?
>>>>>>>>>>>
>>>>>>>>>>> If not, how should a ajax based panel wizard work? Any
>>>>>>>>>>> recommendations?
>>>>>>>>>>>
>>>>>>>>>>> Thanks in advance.
>>>>>>>>>>>
>>>>>>>>>>> Oli
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------******--------------------------**
>>>>>>>>>>> --**
>>>>>>>>>>> --**
>>>>>>>>>>> ---------
>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**
>>>>>>>>>>> che.org<http://apache.org**>
>>>>>>>>>>> <users-unsubscribe@**wicket.**apache.org<http://wicket.apache.org>
>>>>>>>>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>   ------------------------------******--------------------------
>>>>>>>>>>> **--**
>>>>>>>>>>>
>>>>>>>>>> --**
>>>>>>>>>> ---------
>>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org
>>>>>>>>>> <http://apache.org**>
>>>>>>>>>> <users-unsubscribe@**wicket.**apache.org<http://wicket.apache.org>
>>>>>>>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>>>> >
>>>>>>>>>>
>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>   ------------------------------******--------------------------*
>>>>>>>>>> *--**
>>>>>>>>>>
>>>>>>>>> --**
>>>>>>>>> ---------
>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org<
>>>>>>>>> http://apache.org**>
>>>>>>>>> <users-unsubscribe@**wicket.**apache.org<http://wicket.apache.org>
>>>>>>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   ------------------------------******--------------------------**
>>>>>>>>> --**--**
>>>>>>>>>
>>>>>>>> ---------
>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org<
>>>>>>>> http://apache.org**>
>>>>>>>> <users-unsubscribe@**wicket.**apache.org <http://wicket.apache.org>
>>>>>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>>> >
>>>>>>>>
>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>>   ------------------------------******--------------------------**
>>>>>>>> --**
>>>>>>>>
>>>>>>> --**---------
>>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org<
>>>>>>> http://apache.org**>
>>>>>>> <users-unsubscribe@**wicket.**apache.org <http://wicket.apache.org><
>>>>>>> users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>>> >
>>>>>>>
>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>
>>>>>>>
>>>>>>>   ------------------------------******--------------------------**
>>>>>>> --**
>>>>>>>
>>>>>> --**---------
>>>>>> To unsubscribe, e-mail: users-unsubscribe@wicket.****apa**che.org<
>>>>>> http://apache.org**>
>>>>>> <users-unsubscribe@**wicket.**apache.org <http://wicket.apache.org><
>>>>>> users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>>>> >
>>>>>>
>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>
>>>>>>
>>>>>>
>>>>>>  ------------------------------****----------------------------**
>>>> --**---------
>>>> To unsubscribe, e-mail: 
>>>> users-unsubscribe@wicket.**apa**che.org<http://apache.org>
>>>> <users-unsubscribe@**wicket.apache.org<users-unsubscr...@wicket.apache.org>
>>>> >
>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>
>>>>
>>>>
>>>
>>
>> ------------------------------**------------------------------**---------
>> To unsubscribe, e-mail: 
>> users-unsubscribe@wicket.**apache.org<users-unsubscr...@wicket.apache.org>
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com <http://jweekend.com/>
>
>


-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Reply via email to