You want to do something like this instead for your divs:

<div jwcid="[EMAIL PROTECTED]" >

Then your updateComponents statement becomes

updateComponents="ognl:{page.components.foo.clientId,page.components.someOtherDiv.clientId}"

On 4/10/07, Matt Larson <[EMAIL PROTECTED]> wrote:
Jesse,

Thanks for your response.  This feels like the problem, that the IDs on
the <div> tags are not being matched.  However due to my lack of
knowledge about Tapestry's internals, I haven't been able to implement
your suggestion.

What I can't figure out is how to get the clientId out of the OGNL
expression you used (page.components.div1.clientId).  I had a look at
what is in the Map that page.components returns, and I don't see
anything that looks like my components' clientIds in either the
component.getClientId() or in the set of keys of the components Map.
How do I get the clientId from a component named "div1", given that I'm
in a For loop as well?  I'm confused about what the updateComponents
parameter in the DirectLink component should take instead of the IDs on
the <div>s since I can't seem to retrieve the clientIds.

Here is what I am doing now, using components with IDs to try to follow
your example:

In the .jwc file I have two components for <div>s that look like this:

<component id="div1" type="Any">
    <binding name="id" value="ognl:'ratingStars' + hunch.id"/>
</component>

    <component id="div2" type="Any">
        <binding name="id" value="ognl:'ratingImage' + hunch.id"/>
    </component>

These are used to display the <div>s in the .html file, which will be
updated by the asynchronous DirectLink.

Then in my DirectLink component:

<a jwcid="@DirectLink"
            listener="listener:submitRatingAjax"
            async="ognl:true"
            updateComponents="ognl:{'ratingImage' +
hunch.id,'ratingStars' + hunch.id}">...</a>

If you or anyone else can help direct me to the right way to get the
clientIds for components for use within the updateComponents parameter,
that would be greatly appreciated.  I have looked at the source code and
APIs but so far that hasn't cleared it up.

Cheers,
Matt

Jesse Kuhnert wrote:
> Hmm... You can try adding some of the server side logging stuff
> outlined here: http://tapestry.apache.org/tapestry4.1/ajax/debugging.html
> .
>
> I'm guessing that the clientId of the div's you are trying to update
> doesn't match on these responses.
>
> One thing you could do as a test is if you currently do something like:
>
> <a jwcid="@DirectLink" updateComponents="div1,div2"
>
> change it to :
>
> <a jwcid="@DirectLink"
> updateComponents="ognl:{page.components.div1.clientId,
> page.components.div2.clientId}"
>
> I noticed something similar to this recently and probably need to make
> updateComponents="a,b" automatically use the clientId and not
> componentId to match id's on the response.
>
> Hopefully that's the problem.
>
> On 4/8/07, Matt Larson <[EMAIL PROTECTED]> wrote:
>> I have just run into a problem that I think is probably a bug, but may
>> be something that I am doing wrong.  It's definitely a showstopper in my
>> app, though.
>>
>> I have a component that allows users to rate something via the normal
>> kind of "stars" rating.  After a user clicks a star the overall rating
>> of the object is calculated and displayed as a graphic.  I use a
>> component that employs an asynchronous DirectLink to do this, with each
>> star having a different value on submit, and it works quite nicely.  I
>> have this custom component on two different pages and I can submit
>> ratings on both.
>>
>> However, I just added pagination, and as soon as you move off of the
>> home page via the "next" pagination link, the DirectLink for ratings no
>> longer returns anything. The pagination works using the standard kind of
>> "start from" parameter, which calls a listener that simply does
>> setStartFrom(int startFrom) and then lets the pageBeginRender() method
>> calculate the objects to display.
>>
>> I do know the reason that the ratings no longer show the updated
>> graphic--the AjaxResponse just returns empty tags, with no errors
>> reported at all (had a look at this with firebug):
>>
>> <ajax-response></ajax-response>
>>
>> The actual link is firing just fine, and all of the server side
>> processing happens as my logs show. It's just that the ajax response is
>> empty when it should include new HTML for the <div>s to be updated.  It
>> seems like there is some kind of setup that happens when you go directly
>> to Home.html and click the rating link, but not when I've gone to the
>> home page via a DirectLink.  I cannot see what would be different, since
>> my pageBeginRender() method is called, and everything else happens just
>> like it should in the component and in the page.
>>
>> If anyone has run into this before or has an idea regarding what this
>> might cause an async DirectLink to return nothing in some cases, please
>> let me know.  The pagination is a major part of my app, and users need
>> to be able to submit ratings no matter which page they are on, so I am
>> kind of dead in the water until I get this fixed.  Next step is to spend
>> quality time with the source code, but if anyone has a better idea
>> before I take that time...
>>
>> Cheers,
>> Matt
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> 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]




--
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to