thanks for the hint, martin.
ServletWebRequest request = (ServletWebRequest) RequestCycle.get().getRequest();
if (!request.isAjax()) {
response.renderJavascriptReference(new
JQueryEffectCoreResourceReference());
(...)
}
in renderHead() seems to do the trick.
francisco
On Thu, Dec 4, 2008 at 12:56 PM, Martin Makundi
<[EMAIL PROTECTED]> wrote:
> 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]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]