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]