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

Werner Punz edited comment on MYFACES-4672 at 6/21/24 9:08 PM:
---------------------------------------------------------------

Ok the issue is very likely in the XHRRequestLevel2 code

 if (this._context._mfInternal.xhrOp === "multipartQueuedPost") {
            ret = new FormData(this._sourceForm);


FormData does not have the hasKey Function but the has function (seems this was 
not fully specced out, when I coded this given that xhr2 was in beta at best 
then, and they renamed it), we simply can identify the code parts which have 
problems with the hasKey and use has instead as fallback, so if one or the 
other is present we use either!

The reason why your patch fails is that createFormDataDecorator does not really 
work with a real xhr level2 object! This was a fallback to work with iframe 
transports but to keep the calls the same on the upper code levels! 
So we need to fix this on the code parts which rely on the hasKey function 
being present to also check for has!
This is a problem which probably the entire old codebase has!



 


was (Author: werpu):
Ok the issue is very likely in the XHRRequestLevel2 code

 if (this._context._mfInternal.xhrOp === "multipartQueuedPost") {
            ret = new FormData(this._sourceForm);


FormData does not have the hasKey Function but the has function (seems this was 
not fully specced out, when I coded this and they renamed it), we simply can 
identify the code parts which have problems with the hasKey and use has instead 
as fallback, so if one or the other is present we use either!

The reason why your patch fails is that createFormDataDecorator does not really 
work with a real xhr level2 object! This was a fallback to work with iframe 
transports but to keep the calls the same on the upper code levels! 
So we need to fix this on the code parts which rely on the hasKey function 
being present to also check for has!
This is a problem which probably the entire old codebase has!



 

> Uncaught TypeError: G.hasKey is not a function
> ----------------------------------------------
>
>                 Key: MYFACES-4672
>                 URL: https://issues.apache.org/jira/browse/MYFACES-4672
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.2.16
>            Reporter: Volodymyr Siedlecki
>            Assignee: Werner Punz
>            Priority: Major
>
> This affects 2.2 which I know is out of date, but I have a user of MyFaces 
> 2.2 who needs this bug fixed.
> I ported MYFACES-4606 to 2.2 here: 
> [https://github.com/apache/myfaces/pull/647]
> 4606 was applied to 2.3, so I applied the same fix to 2.2.  However, I didn't 
> realize that _AjaxRequestLevel2 was removed from 2.3 in this PR: 
> [https://github.com/apache/myfaces/pull/415/files]
> _AjaxRequestLevel2 still exists in the 2.2 codebase. 
> This mean that `if(targetBuf.hasKey(identifier))` was called from 
> _AjaxRequestLevel2's getFormData which does not decorate the FormData to 
> include the hasKey method – thus we get " G.hasKey is not a function". 
> [https://github.com/volosied/myfaces/blob/d5d28a0e6cae3ea22e021c64ecf474d6352bf900/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxRequestLevel2.js#L32-L44]
> This error is reproducible via multi-part form requests that use ajax. 
> What is the proper fix here? I'll create a draft PR for what I think is 
> correct. 
> Thanks!



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

Reply via email to