[jsr-314-open] f:ajax not working inside composite components?

Andy Schwartz andy.schwartz at ORACLE.COM
Tue May 12 13:11:40 EDT 2009


Hi David -

David Geary wrote On 5/12/2009 12:36 PM ET:
>
> <h:selectOneMenu id="menu"
>                   value="#{place.zoomIndex}"
>                   valueChangeListener="#{place.zoomChanged}"
>                   style="font-size:13px;font-family:Palatino">
>     
>   <f:selectItems value="#{places.zoomLevelItems}"/>
>   *<f:ajax execute="@this" render="image"/>
> *              
> </h:selectOneMenu>

This looks good to me.
>
> With FireBug, I've verified that a POST request is indeed executed 
> when I change the zoom level, and it appears that everything is in order:
>
> form    form
> j_id-939329235_16ef8569:0:j_id-939329235_16ef8513:j_id1608935764_5fe6690f:menu    
> 3
> javax.faces.ViewState    -1363564553004911965:-1863826268811277742
> javax.faces.behavior.event    valueChange
> javax.faces.partial.ajax    true
> javax.faces.partial.event    change
> javax.faces.partial.execute    
> j_id-939329235_16ef8569:0:j_id-939329235_16ef8513:j_id1608935764_5fe6690f:menu
> javax.faces.partial.render    
> j_id-939329235_16ef8569:0:j_id-939329235_16ef8513:j_id1608935764_5fe6690f:image
> javax.faces.source    
> j_id-939329235_16ef8569:0:j_id-939329235_16ef8513:j_id1608935764_5fe6690f:menu

And the request payload looks right - seems like all of the necessary 
information is present.  (Though, man, those auto-generated client ids 
sure are huge!)

>
> I get a response back that looks like this:
>
>   <?xml version="1.0" encoding="utf-8"?>
>   <partial-response><changes><update 
> id="javax.faces.ViewState"><![CDATA[1747337848471748955:2683565346534242854
>   ]]></update></changes></partial-response>
>
> However, with f:ajax, my value change listener is never invoked on the 
> server, so the menu doesn't update, even though I've specified that 
> the menu should go through the execute phase of the lifecycle.
>
> Does anyone know why my value change listener is not invoked? Am I 
> doing something wrong, or is this a bug?

Seems like the execute portion of the lifecycle is not being invoked 
properly.  I don't see anything wrong in your code - so I suspect there 
is a bug here.

>
> btw, here are a couple of interesting datapoints:
>
> 1. I have breakpoints in jsf.ajax.request and jsf.ajax.response. The 
> request breakpoint is hit, but the response is not. The return status 
> for the response is 200, so there are apparently no errors.
>
> 2. I thought, from Jim Driscoll's blog about f:ajax, that we had to 
> specify client ids for execute and render, so I originally had this:
>
>   <f:ajax execute="@this" render="#{cc.clientId}:image"/>
>
> But when I do that, I get this error...
>
>   <f:ajax> contains an unknown id 
> 'j_id-939329235_16ef8569:0:j_id-939329235_16ef8513:j_id1608935764_5fe6690f:image'
>
> ...when I load the page, even though that is the correct client id (as 
> evidenced from the request data above). Evidently, we're supposed to 
> use the component id and not the client id?

When specifying execute/render ids for <f:ajax>, the id resolution 
behavior is similar to findComponent().  So, if you specify a relative 
id, eg. "image", this should be resolved relative to the nearest naming 
container.  In your case, that would be the composite component.  In 
order to specify an absolute id, you would prefix the id with ":", eg. 
":foo:mycompositecomp:image".

Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jsr-314-open-mirror/attachments/20090512/56e16f17/attachment.html 


More information about the jsr-314-open-mirror mailing list