Volodymyr Siedlecki created MYFACES-4658: --------------------------------------------
Summary: faces.util.chain behavior changed Key: MYFACES-4658 URL: https://issues.apache.org/jira/browse/MYFACES-4658 Project: MyFaces Core Issue Type: Bug Affects Versions: 4.0.2 Reporter: Volodymyr Siedlecki Given the following generated HTML, an alert will occur. If you click OK, it will perform an action on a backing bean. However, if you cancel, it should not. {code:java} <input type="submit" value="Test" onclick="return faces.util.chain(this, event,function(event){return confirm('Please Confirm');});">{code} On Faces 3.0, if cancel is pressed, then the backing bean is not invoked. On Faces 4.0, however, pressing cancel *does* invoke the bean. Faces 3.0: jsf.util.chain snippet: {noformat} if (FUNC == typeof arguments[cnt]) { ret = arguments[cnt].call(source, event); } else { //either a function or a string can be passed in case of a string we have to wrap it into another function ret = new Function("event", arguments[cnt]).call(source, event); } //now if one function returns false in between we stop the execution of the cycle //here, note we do a strong comparison here to avoid constructs like 'false' or null triggering if (ret === false /*undefined check implicitly done here by using a strong compare*/) { return false; } }{noformat} Faces 4.0: {noformat} function chain(source, event, ...funcs) { // we can use our lazy stream each functionality to run our chain here. // by passing a boolean as return value into the onElem call // we can stop early at the first false, just like the spec requests let ret; funcs.every(func => { let returnVal = resolveAndExecute(source, event, func); if (returnVal !== false) { ret = returnVal; } return returnVal !== false; }); return ret; }{noformat} It looks like conditions changed here? "ret === false" became "returnVal !== false" ? If cancel is pressed, false is returned, which means the chain function returns false in 3.0. In faces 4.0, ret is never set, so undefined is returned. -- This message was sent by Atlassian Jira (v8.20.10#820010)