You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2023/06/27 18:00:34 UTC
[myfaces] branch main updated: https://issues.apache.org/jira/browse/MYFACES-4610
This is an automated email from the ASF dual-hosted git repository.
werpu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/main by this push:
new e8d23c257 https://issues.apache.org/jira/browse/MYFACES-4610
new c904cbde6 Merge pull request #592 from werpu/main
e8d23c257 is described below
commit e8d23c257b264fc2758ff76d03581fe2a30a3399
Author: Werner Punz <we...@gmail.com>
AuthorDate: Tue Jun 27 19:49:19 2023 +0200
https://issues.apache.org/jira/browse/MYFACES-4610
Fix for virtual issuing elements
https://issues.apache.org/jira/browse/MYFACES-4605
Fix for unique identifier number should start at 1
---
api/src/client/package-lock.json | 14 +++----
api/src/client/package.json | 2 +-
.../faces/impl/util/HiddenInputBuilder.ts | 4 +-
.../typescript/faces/impl/xhrCore/XhrRequest.ts | 10 +++--
.../frameworkBase/_ext/shared/StandardInits.ts | 22 +++++++++++
.../faces/test/xhrCore/RequestTest.spec.ts | 45 ++++++++++++++++++++++
.../faces/test/xhrCore/ResponseTest.spec.ts | 6 +--
7 files changed, 86 insertions(+), 17 deletions(-)
diff --git a/api/src/client/package-lock.json b/api/src/client/package-lock.json
index 90fdf9bb9..197afef55 100644
--- a/api/src/client/package-lock.json
+++ b/api/src/client/package-lock.json
@@ -22,7 +22,7 @@
"html-webpack-plugin": "^5.5.1",
"jsdom": "^21.1.1",
"jsdom-global": "^3.0.2",
- "jsf.js_next_gen": "4.0.2-beta.1",
+ "jsf.js_next_gen": "4.0.2-beta.3",
"mocha": "^10.2.0",
"npm-check-updates": "^16.10.8",
"nyc": "^15.1.0",
@@ -4990,9 +4990,9 @@
}
},
"node_modules/jsf.js_next_gen": {
- "version": "4.0.2-beta.1",
- "resolved": "https://registry.npmjs.org/jsf.js_next_gen/-/jsf.js_next_gen-4.0.2-beta.1.tgz",
- "integrity": "sha512-rzrvgZpIwRaW2WqsAKZppYMhdRSuxHkapWWUR+k15eapKXtYh6MWpCS0lvA38fZWKUGcTnDzWpvtZxdhNCAdHg==",
+ "version": "4.0.2-beta.3",
+ "resolved": "https://registry.npmjs.org/jsf.js_next_gen/-/jsf.js_next_gen-4.0.2-beta.3.tgz",
+ "integrity": "sha512-rqDExkH732v8mSTAZeKsIo7EWYCcz2huI8OpJDP3uYFiJTRhRAHY3cQmCPwwwrNrek2zEqosw4kk6eDtjfspEw==",
"dev": true,
"dependencies": {
"mona-dish": "0.28.10"
@@ -13831,9 +13831,9 @@
"dev": true
},
"jsf.js_next_gen": {
- "version": "4.0.2-beta.1",
- "resolved": "https://registry.npmjs.org/jsf.js_next_gen/-/jsf.js_next_gen-4.0.2-beta.1.tgz",
- "integrity": "sha512-rzrvgZpIwRaW2WqsAKZppYMhdRSuxHkapWWUR+k15eapKXtYh6MWpCS0lvA38fZWKUGcTnDzWpvtZxdhNCAdHg==",
+ "version": "4.0.2-beta.3",
+ "resolved": "https://registry.npmjs.org/jsf.js_next_gen/-/jsf.js_next_gen-4.0.2-beta.3.tgz",
+ "integrity": "sha512-rqDExkH732v8mSTAZeKsIo7EWYCcz2huI8OpJDP3uYFiJTRhRAHY3cQmCPwwwrNrek2zEqosw4kk6eDtjfspEw==",
"dev": true,
"requires": {
"mona-dish": "0.28.10"
diff --git a/api/src/client/package.json b/api/src/client/package.json
index ef10a2886..49f27aa6e 100644
--- a/api/src/client/package.json
+++ b/api/src/client/package.json
@@ -24,7 +24,7 @@
"html-webpack-plugin": "^5.5.1",
"jsdom": "^21.1.1",
"jsdom-global": "^3.0.2",
- "jsf.js_next_gen": "4.0.2-beta.1",
+ "jsf.js_next_gen": "4.0.2-beta.3",
"mocha": "^10.2.0",
"npm-check-updates": "^16.10.8",
"nyc": "^15.1.0",
diff --git a/api/src/client/typescript/faces/impl/util/HiddenInputBuilder.ts b/api/src/client/typescript/faces/impl/util/HiddenInputBuilder.ts
index d2a50a484..ddcec7d64 100644
--- a/api/src/client/typescript/faces/impl/util/HiddenInputBuilder.ts
+++ b/api/src/client/typescript/faces/impl/util/HiddenInputBuilder.ts
@@ -59,7 +59,7 @@ export class HiddenInputBuilder {
let existingStates = DQ$(`[name*='${$nsp(this.name)}']`);
let cnt = existingStates.asArray.map(state => {
- let ident: string = state.id.orElse("-1").value;
+ let ident: string = state.id.orElse("0").value;
ident = ident.substring(ident.lastIndexOf(SEP)+1);
return parseInt(ident);
})
@@ -68,7 +68,7 @@ export class HiddenInputBuilder {
})
.reduce((item1, item2) => {
return Math.max(item1, item2);
- }, -1);
+ }, 0); //we start with 1 (see cnt++)
//the maximum new ident is the current max + 1
cnt++;
diff --git a/api/src/client/typescript/faces/impl/xhrCore/XhrRequest.ts b/api/src/client/typescript/faces/impl/xhrCore/XhrRequest.ts
index 586f71653..25eda21bf 100644
--- a/api/src/client/typescript/faces/impl/xhrCore/XhrRequest.ts
+++ b/api/src/client/typescript/faces/impl/xhrCore/XhrRequest.ts
@@ -152,10 +152,12 @@ export class XhrRequest extends AsyncRunnable<XMLHttpRequest> {
const issuingItemId = this.internalContext.getIf(CTX_PARAM_SRC_CTL_ID).value;
if(issuingItemId) {
- const issuingItem = DQ.byId(issuingItemId);
- const arr = new ExtConfig({});
- arr.assign(issuingItemId).value = issuingItem.val;
- formData.shallowMerge(arr, true, true);
+ const itemValue = DQ.byId(issuingItemId).inputValue;
+ if(itemValue.isPresent()) {
+ const arr = new ExtConfig({});
+ arr.assign(issuingItemId).value = itemValue.value;
+ formData.shallowMerge(arr, true, true);
+ }
}
this.responseContext = requestPassThroughParams.deepCopy;
diff --git a/api/src/client/typescript/faces/test/frameworkBase/_ext/shared/StandardInits.ts b/api/src/client/typescript/faces/test/frameworkBase/_ext/shared/StandardInits.ts
index 65be83c5f..0201909a8 100644
--- a/api/src/client/typescript/faces/test/frameworkBase/_ext/shared/StandardInits.ts
+++ b/api/src/client/typescript/faces/test/frameworkBase/_ext/shared/StandardInits.ts
@@ -273,6 +273,23 @@ export module StandardInits {
</html>`;
+ const VIRTUAL_ELEMENT = `<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>Title</title>
+</head>
+<body>
+<form id="jd_0:blarg">
+ <tobago-multi-select id="page:numbers">
+ <input type="checkbox" name="page:numbers" id="page:numbers:1" value="1"></input>
+ <input type="checkbox" name="page:numbers" id="page:numbers:2" value="2"></input>
+ <input type="checkbox" name="page:numbers" id="page:numbers:3" value="3"></input>
+ </tobago-multi-select>
+</form>
+</body>
+</html>`;
+
/**
* a page simulating basically a simple faces form
@@ -499,6 +516,11 @@ function triggerRequestChain(event) {
export function defaultMyFacesNamespaces(withJsf = true): Promise<() => void> {
return init(HTML_FORM_NAMESPACED, withJsf);
}
+
+ export function initVirtualElement(withJsf = true): Promise<() => void> {
+ return init(VIRTUAL_ELEMENT, withJsf);
+ }
+
export function defaultMyFaces23(withJsf = true): Promise<() => void> {
return init(HTML_FORM_DEFAULT.replace(/jakarta/gi, "javax"), withJsf, false);
}
diff --git a/api/src/client/typescript/faces/test/xhrCore/RequestTest.spec.ts b/api/src/client/typescript/faces/test/xhrCore/RequestTest.spec.ts
index 1420eb883..b2b1a594b 100644
--- a/api/src/client/typescript/faces/test/xhrCore/RequestTest.spec.ts
+++ b/api/src/client/typescript/faces/test/xhrCore/RequestTest.spec.ts
@@ -30,7 +30,9 @@ import {
SUCCESS
} from "../../impl/core/Const";
import defaultMyFaces = StandardInits.defaultMyFaces;
+import initVirtualElement = StandardInits.initVirtualElement;
import STD_XML = StandardInits.STD_XML;
+import exp from "constants";
declare var faces: any;
declare var Implementation: any;
@@ -638,6 +640,49 @@ describe('Tests after core when it hits response', function () {
done();
});
+ it("must handle the virtual issuing elements correctly", function() {
+
+ const waitForResult = initVirtualElement();
+ return waitForResult.then((close) => {
+ const send = sinon.spy(XMLHttpRequest.prototype, "send");
+
+ try {
+ let dqElem = DomQuery.byId("page:numbers");
+ let element = dqElem.getAsElem(0).value;
+ dqElem.querySelectorAll("input").click();
+
+ faces.ajax.request(element, null, {
+ execute: "page:numbers",
+ render: "@form",
+ params: {
+ pass1: "pass1",
+ pass2: "pass2"
+ }
+ });
+
+ let argsVal: any = send.args[0][0];
+ let arsArr = argsVal.split("&");
+ let resultsMap = {};
+ let doubles = 0;
+ for (let val of arsArr) {
+ let keyVal = val.split("=");
+ if(!!resultsMap[keyVal[0]]) {
+ doubles++;
+ }
+ resultsMap[keyVal[0]] = keyVal[1];
+ }
+
+ expect(doubles).to.eq(2);
+
+ } finally {
+
+ send.restore();
+ }
+
+ return true;
+ });
+
+ });
});
diff --git a/api/src/client/typescript/faces/test/xhrCore/ResponseTest.spec.ts b/api/src/client/typescript/faces/test/xhrCore/ResponseTest.spec.ts
index 8a9c733df..0ff9f8fb4 100644
--- a/api/src/client/typescript/faces/test/xhrCore/ResponseTest.spec.ts
+++ b/api/src/client/typescript/faces/test/xhrCore/ResponseTest.spec.ts
@@ -723,9 +723,9 @@ describe('Tests of the various aspects of the response protocol functionality',
expect(DQ$("#form2 [name*='jakarta.faces.ViewState']").val).to.eq("booga_after_update");
expect(DQ$("#form3 [name*='jakarta.faces.ViewState']").val).to.eq("booga_after_update");
- expect(DQ$("#form1 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:0") === 0).to.be.true;
- expect(DQ$("#form2 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:1") === 0).to.be.true;
- expect(DQ$("#form3 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:2") === 0).to.be.true;
+ expect(DQ$("#form1 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:1") === 0).to.be.true;
+ expect(DQ$("#form2 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:2") === 0).to.be.true;
+ expect(DQ$("#form3 [name*='jakarta.faces.ViewState']").id.value.indexOf("viewroot_1:jakarta.faces.ViewState:3") === 0).to.be.true;
done();
});