There is ServletWebRequest.isAjax
**
Martin
2008/12/4 francisco treacy <[EMAIL PROTECTED]>:
> i've been using the aforementioned toggle behavior almost always in
> ajaxy pages, and in that case they work fine.
>
> basically that means i add toggle behaviors to components in a page.
> when i call an ajax link, toggle works ok because the isTemporary()
> method of the behavior returns *true* (otherwise it would attach the
> toggle effect contribution to the <header-contribution> part of the
> response and it would blow things up - i.e. triggering more than once
> a certain toggle effect).
>
> however, i now started using that in pages that use normal links (not
> ajax). so when i get the (non ajax) response for the linked page, as
> the behavior is temporary, it won't contribute to the header anymore.
> thus breaking the effect.
>
> say page1 links to page1b [a new version of page1] when i "diff page1
> page1b " i roughly get this:
>
> 24,28d23
> < <script type="text/javascript"
> src="resources/myapp.wicket.components.jquery.JQueryEffectCoreResourceReference/jquery-1.2.6.effects.core.js"></script>
> < <script type="text/javascript" ><!--/*--><![CDATA[/*><!--*/
> < Wicket.Event.add(window, "domready", function() {
> $('#optionalInfoLink58').click(function() {
> $('#OptionalInfoArea59').slideToggle(450); }) ;});
> < /*-->]]>*/</script>
>
> i.e. the toggle effect won't work in page1b because "function() {
> $('#optionalInfoLink58').click(function() {
> $('#OptionalInfoArea59').slideToggle(450); }) ;}" is not present in
> that page at all. note this doesn't pose a problem if i refresh
> certain components via ajax because the original page still contains
> this "javascript listener" in the header.
>
> my question: is there a way to tell inside isTemporary() whether the
> request was ajax or normal, to return true or false according to that?
> other suggestions?
>
> francisco
>
>
> On Thu, Nov 6, 2008 at 2:45 PM, francisco treacy
> <[EMAIL PROTECTED]> wrote:
>>> It did.. You could try the isTemporary (return true) on the behavior, it
>>
>> thanks nino... that *is* the solution, works like a charm
>>
>> my mistake for not paying attention to the last bits of the javadoc
>> ibehavior page :)
>>
>> "boolean isTemporary()
>>
>> Specifies whether or not this behavior is temporary. Temporary
>> behaviors are removed at the end of request. Such behaviors are useful
>> for modifying component rendering only when it renders next. Usecases
>> include javascript effects, initial clientside dom setup, etc. "
>>
>> ... couldn't be more clear...
>>
>> cheers,
>>
>> francisco
>>
>> On Thu, Nov 6, 2008 at 2:22 PM, Nino Saturnino Martinez Vazquez Wael
>> <[EMAIL PROTECTED]> wrote:
>>> Hi Francisco
>>>
>>> It did.. You could try the isTemporary (return true) on the behavior, it
>>> could mean that it will only add the behavior for that request, but I am not
>>> sure.. Or you could try creating a new markupcontainer
>>> (listOfCommentsContainer), it'll give it a new id..
>>>
>>> Or you could stuff in some logic as a ajaxcalldecorator on your link, that
>>> will clean it up in pure js...
>>>
>>> I had some difficulties with exactly this when I did the wicket reaction
>>> game.
>>>
>>> I hope this helpes..
>>>
>>> francisco treacy wrote:
>>>>>
>>>>> want to not output the list with wicket's ordinary ajax replace method?
>>>>>
>>>>
>>>> hmmm... wicket's ordinary ajax replace method?
>>>>
>>>> the basic problem here is:
>>>> -when the page is first rendered, the following is added to the dom
>>>> (it's the behaviour responsible for this):
>>>>
>>>> $('#numberOfCommentsLink24').click(function() {
>>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>>
>>>> -when i click on the "trigger" link (numberOfCommentsLink24) i fire an
>>>> ajax request, and add a webmarkupcontainer (listOfCommentsContainer25)
>>>> i want to "refresh":
>>>>
>>>> target.addComponent(listOfCommentsContainer);
>>>>
>>>> -the ajax response is: *not only* the updated
>>>> listOfCommentsContainer25, but *also* an <evaluate> section in the
>>>> ajax response, that includes:
>>>>
>>>> $('#numberOfCommentsLink24').click(function() {
>>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>>
>>>> (of course, because the behaviour has been added to the
>>>> listOfCommentsContainer).
>>>>
>>>>
>>>> -... that means, i now have loaded in the dom *twice* :
>>>>
>>>> $('#numberOfCommentsLink24').click(function() {
>>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>>
>>>> so with *one* click on the numberOfCommentsLink24 , i get *two* calls
>>>> to $('#listOfCommentsContainer25').slideToggle(450);
>>>>
>>>> which basically slides up, and immediately down. that is, slide toggle
>>>> means it goes up (hides) if it was down (visible), it goes down
>>>> (shows) if it was up (hidden).
>>>>
>>>> i want to avoid this behaviour by stopping the ajax response from
>>>> spitting back the javascript code for a second time. perhaps do
>>>> something inside the behaviour class?
>>>>
>>>> hope it clarifies! thanks,
>>>>
>>>> francisco
>>>>
>>>>
>>>>
>>>> On Thu, Nov 6, 2008 at 1:53 PM, Nino Saturnino Martinez Vazquez Wael
>>>> <[EMAIL PROTECTED]> wrote:
>>>>
>>>>>
>>>>> Im not sure I understand then..? Could you explain another way? You would
>>>>> want to not output the list with wicket's ordinary ajax replace method?
>>>>>
>>>>> francisco treacy wrote:
>>>>>
>>>>>>
>>>>>> yes, i'm aware of those. but i'd want to 'remove' things from the
>>>>>> ajaxRequestTarget rather than append...
>>>>>>
>>>>>> or, some way of attaching/executing behaviours only once?
>>>>>>
>>>>>>
>>>>>> On Thu, Nov 6, 2008 at 12:58 PM, Nino Saturnino Martinez Vazquez Wael
>>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> theres a prepend / append js on ajaxRequestTarget, that should work...
>>>>>>>
>>>>>>> francisco treacy wrote:
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> hi,
>>>>>>>>
>>>>>>>> we're using a home-grown wrapper for integrating jquery into wicket -
>>>>>>>> specifically for jquery effects.
>>>>>>>>
>>>>>>>> and i'm having some trouble with ajax updates. i'll explain with an
>>>>>>>> example:
>>>>>>>>
>>>>>>>>
>>>>>>>> final WebMarkupContainer listOfCommentsContainer = new
>>>>>>>> WebMarkupContainer("listOfCommentsContainer");
>>>>>>>> listOfCommentsContainer.setOutputMarkupId(true);
>>>>>>>> add(listOfCommentsContainer);
>>>>>>>>
>>>>>>>> AjaxLink<Void> numberOfCommentsLink = new
>>>>>>>> AjaxLink<Void>("numberOfCommentsLink") {
>>>>>>>> @Override
>>>>>>>> public void onClick(AjaxRequestTarget target) {
>>>>>>>>
>>>>>>>> target.addComponent(listOfCommentsContainer);
>>>>>>>> }
>>>>>>>> };
>>>>>>>>
>>>>>>>> listOfCommentsContainer.add(new JQueryEffectBehavior(new
>>>>>>>> SlideToggleEffect(), numberOfCommentsLink));
>>>>>>>>
>>>>>>>> add(numberOfCommentsLink);
>>>>>>>>
>>>>>>>> this code is basically outputting something like:
>>>>>>>>
>>>>>>>> <script type="text/javascript" ><!--/*--><![CDATA[/*><!--*/
>>>>>>>> Wicket.Event.add(window, "domready", function() {
>>>>>>>> $('#numberOfCommentsLink24').click(function() {
>>>>>>>> $('#listOfCommentsContainer25').slideToggle(450); }) ;});
>>>>>>>> /*-->]]>*/</script>
>>>>>>>>
>>>>>>>> listOfCommentsContainer25 being the target container to slide,
>>>>>>>> numberOfCommentsLink24 the trigger.
>>>>>>>>
>>>>>>>> this works fine per se. now when i click on numberOfCommentsLink24 ,
>>>>>>>> my list is refreshed (added it to the ajaxrequesttarget) and the
>>>>>>>> effect behaviour outputting javascript code again...
>>>>>>>>
>>>>>>>> <ajax-response><header-contribution><![CDATA[<head
>>>>>>>> xmlns:wicket="http://wicket.apache.org"><script type="text/javascript"
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> src="resources/hub.app.wicket.components.jquery.JQueryResourceReference/jquery-1.2.6.js"></script>
>>>>>>>> <script type="text/javascript"
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> src="resources/hub.app.wicket.components.jquery.JQueryEffectCoreResourceReference/jquery-1.2.6.effects.core.js"></script>
>>>>>>>> </head>]]></header-contribution>
>>>>>>>> (...)
>>>>>>>> <evaluate><![CDATA[$('#numberOfCommentsLink24').click(function() {
>>>>>>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>>>>>> ]]></evaluate></ajax-response>
>>>>>>>>
>>>>>>>> which means that i can visually perceive a very quick slideDown
>>>>>>>> followed by a slideUp (this is the normal slideToggle functionality).
>>>>>>>>
>>>>>>>> is there a way not to include the <evaluate> part? or detect if the
>>>>>>>> component has already been rendered in markup to check whether to
>>>>>>>> execute the behaviour again?
>>>>>>>> perhaps i'm missing some basic point here... any suggestions?
>>>>>>>>
>>>>>>>> thanks in advance,
>>>>>>>>
>>>>>>>> francisco
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> -Wicket for love
>>>>>>>
>>>>>>> Nino Martinez Wael
>>>>>>> Java Specialist @ Jayway DK
>>>>>>> http://www.jayway.dk
>>>>>>> +45 2936 7684
>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> -Wicket for love
>>>>>
>>>>> Nino Martinez Wael
>>>>> Java Specialist @ Jayway DK
>>>>> http://www.jayway.dk
>>>>> +45 2936 7684
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>> --
>>> -Wicket for love
>>>
>>> Nino Martinez Wael
>>> Java Specialist @ Jayway DK
>>> http://www.jayway.dk
>>> +45 2936 7684
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]