[
https://issues.apache.org/jira/browse/MYFACES-4680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17891647#comment-17891647
]
Werner Punz commented on MYFACES-4680:
--------------------------------------
Ok found an issue besides that issue the cr mentioned above fixes...
the websocket call triggers another ajax request which then should trigger the
rerender, the problem is that the element is outside of any form and has no
html5 form attribute referenced, which means we cannot send down an execution
form.
There is code in place if an element does not reference a form that an error is
thrown, the error seems to be swallowed due to the websocket request.
I will think of a better solution might be interesting on what mojarra does for
an element and no form, they probably just drag the existing form in as
fallback to fulfill the ajax criteria.
> 4.1 TCK Failure: Spec1396IT#testViewScopedWebsocket
> ---------------------------------------------------
>
> Key: MYFACES-4680
> URL: https://issues.apache.org/jira/browse/MYFACES-4680
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 2.2.15, 2.3.10, 2.3-next-M8, 4.0.0, 4.1.0-RC2
> Reporter: Volodymyr Siedlecki
> Assignee: Volodymyr Siedlecki
> Priority: Major
> Attachments: image-2024-10-17-21-20-41-622.png,
> image-2024-10-17-21-21-22-229.png, screenshot-1.png, screenshot-2.png,
> test-faces23-websocket.war
>
>
> The app expects "pushed!" to display when the "push" button is pressed. It
> is not, and the test fails.
> Ajax requests do not occur when they are registered a websocket tag, from
> what I could gather. It seems like the renderAjaxOutput behavior isn't
> registered / called with the faces.push.init script.
> MyFaces generated code (see behavior param (1) – second to last):
> {code:java}
> faces.push.init('j_id_c','/test-faces23-websocket/jakarta.faces.push/view?76379b861759b95fa70c118d2e05d29f','view',function(){document.getElementById('opened').innerHTML='yes';},null,null,null,{renderAjaxOutput:[function(event){myfaces.ab('j_id_c',event,'renderAjaxOutput','','ajaxOutput')}]},true);{code}
> Facelet:
> [https://github.com/jakartaee/faces/blob/4.1.0-RELEASE/tck/faces23/websocket/src/main/webapp/spec1396ViewScopedWebsocket.xhtml#L39]
> {code:java}
> <f:websocket channel="view" scope="view"
> onopen="function(){document.getElementById('opened').innerHTML='yes';}">
> <f:ajax event="renderAjaxOutput" render="ajaxOutput" />
> </f:websocket>{code}
> Link to Test:
> [https://github.com/jakartaee/faces/blob/4.1.0-RELEASE/tck/faces23/websocket/src/test/java/ee/jakarta/tck/faces/test/javaee8/websocket/Spec1396IT.java#L94]
> I test the same TCK app on Mojarra, and it sends out two XHR requests when
> the button is clicked. One for the button click and another for the
> renderAjaxOutput event.
> MyFaces only handles the one XHR for the button click. Neither do I see the
> onMessage invoked, which per the javadoc should trigger the behavior (
> "behavior param: Client behavior functions to be invoked when specific
> message is received.")?
> Docs:
> [1)
> https://jakarta.ee/specifications/faces/4.0/jsdoc/faces.push|https://jakarta.ee/specifications/faces/4.0/jsdoc/faces.push]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)