No things should still work the same with 4.1.1. .(but upgrading might be a good idea either way)
The error you got means that you don't have a component defined in your page with an id of "div1". Your example before on how you were defining your div blocks was incorrect and I provided an example of how to do it...ie : <div jwcid="[EMAIL PROTECTED]" > It'll work if you define your block that way. On 4/10/07, Matt Larson <[EMAIL PROTECTED]> wrote:
Hi Jesse, I did try this approach previously, thinking OGNL would use the Map key as a property like in your example (I think that's what it's doing in your example?). But following your example very closely, I get this exception: Unable to read OGNL expression...source is null for getProperty(null, "clientId") (source is updateComponents="ognl:{page.components.div1.clientId,page.components.div2.clientId}") I think was partly the cause of my confusion before :). I couldn't see how that expression could work, and it appears to be dying at the div1/div2 step. Now I'm suspecting I need to upgrade to the latest Tap 4.x source and the latest OGNL, which I know you have done a lot of work on. Do I need those to make your example work? Thanks again, Matt Jesse Kuhnert wrote: > 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] >> >> > > --------------------------------------------------------------------- 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]