[ 
https://issues.apache.org/jira/browse/MYFACES-3904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14042011#comment-14042011
 ] 

Sven Linstaedt commented on MYFACES-3904:
-----------------------------------------

Having a look at the rendered element Id for the jsf.ajax.request call, the 
same problem may occur here too.

> jsf.util.Chain() is rendered with wrong event source
> ----------------------------------------------------
>
>                 Key: MYFACES-3904
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3904
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.2.0
>            Reporter: Sven Linstaedt
>
> When applying multiple behaviors to an component, they are rendered to be 
> executed in chain by using jsf.util.chain(). So far so good. 
> when applying behaviors to a component, that renders multiple html input 
> elements like h:selectManyCheckbox or h:selectOneRadio, the javascript is 
> generated for every html elements, from which everyone gets it's own id 
> rendered by appending a ongoing number to the clientId of the component. In 
> the myfaces renderer code these Ids are called itemId.
> The problem is, when you apply multiple behaviors to components, which render 
> multiple html input elements: in this case all behaviors are wrapped in a 
> chained call, which unfortunately receives not the itemId of the currently 
> rendered html element as the source parameter, but the clientId of the 
> component. According to the spec, the source parameter should contain "the 
> DOM element that triggered this Ajax request, or an id string of the element 
> to use as the triggering element." 
> Because the event handler is bound to the html input element and not to it's 
> parent html "wrapping" element used for layouting, the wrong event source is 
> rendered in my option, which leads to the following side effect: Behavior 
> scripts, that reference the current event producing html element via "this" 
> will receive a different calling context ("this), if chain together with 
> multiple behaviors than, if they would as single behavior, leading to all 
> behavior scripts referencing "this" to run in the wrong context and often 
> doing nothing meaningful at all.
> E.g.: chained invocation of 
> {code}
> <input id="form:shipmentDateCriteriaOption:0" type="radio" 
> name="form:shipmentDateCriteriaOption" value="NEXT_WEEK" 
> onchange="$(this).val('')">
> {code}
> and
> {code}
> <input id="form:shipmentDateCriteriaOption:0" type="radio" 
> name="form:shipmentDateCriteriaOption" value="NEXT_WEEK" 
> onchange="jsf.ajax.request('form:shipmentDateCriteriaOption',event,{'javax.faces.behavior.event':'valueChange'})">
> {code}
> is rendered as:
> {code}
> <input id="form:shipmentDateCriteriaOption:0" type="radio" 
> name="form:shipmentDateCriteriaOption" value="NEXT_WEEK" 
> onchange="jsf.util.chain(document.getElementById('form:shipmentDateCriteriaOption'),
>  event,'$(this).val(\'\')', 
> 'jsf.ajax.request(\'form:shipmentDateCriteriaOption\',event,{\'javax.faces.behavior.event\':\'valueChange\'})');">
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to