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]