You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Volodymyr Siedlecki (Jira)" <de...@myfaces.apache.org> on 2022/11/21 15:30:00 UTC

[jira] [Created] (MYFACES-4505) TCK: Spec1567IT: Ajax does not execute specified targets in composite component

Volodymyr Siedlecki created MYFACES-4505:
--------------------------------------------

             Summary: TCK: Spec1567IT: Ajax does not execute specified targets in composite component
                 Key: MYFACES-4505
                 URL: https://issues.apache.org/jira/browse/MYFACES-4505
             Project: MyFaces Core
          Issue Type: Bug
    Affects Versions: 4.0.0-RC2
            Reporter: Volodymyr Siedlecki
         Attachments: test-faces40-ajax.war

The [Spec1567IT|https://github.com/jakartaee/faces/issues/1567] test in the TCK is failing due. MyFaces is still executing only individual components within the composite component. 

Using the example in the spec issue, MyFaces should execute the component as a whole (or at least the targets), not it's parts.  I've attached the TCK app (contains Mojarra Jars) and the source for reference.

Looking at the generated HTML, we can see the obvious difference in the third argument where MyFaces is missing the IDs (which are from the targets attribute). 

Source Code ([Full App Here|https://github.com/jakartaee/faces/tree/master/tck/faces40/ajax/src/main]): 
{code:java}
<cc:clientBehavior name="change" default="true" targets="hour minute" event="change" /> {code}

Mojarra: 

 
{code:java}
<input id="form1:inputs:input1" type="text" name="form1:inputs:input1" onchange="mojarra.ab(this,event,'change','form1:inputs:input1 form1:inputs:input2','form1:messages')"> {code}

MyFaces:
{code:java}
<input id="form1:inputs:input1" name="form1:inputs:input1" type="text" value="" onchange="myfaces.ab(this,event,'change','','form1:messages')"> {code}

From looking at the code, MyFaces gets the targets and then find the components (for each target) to attach the ajax behavior to.  As stated in the spec issue. this is the incorrect procedure.

[https://github.com/apache/myfaces/blob/d83e3c7c498d588de3b7a65da40c2152b1076829/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/ClientBehaviorAttachedObjectTargetImpl.java#L67-L84]

To be spec compliant, we should skip this section, and grab the targets and set to the execute property of the Ajax Behavior.  This set would occur with the AjaxHandler#applyAttachedObject method.  Targets would need to be either passed in or taken from the parent component argument.  




 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)