You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2025/12/09 21:54:17 UTC
(myfaces-tobago) branch main updated: test: refactoring
This is an automated email from the ASF dual-hosted git repository.
hnoeth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git
The following commit(s) were added to refs/heads/main by this push:
new 0b473486cf test: refactoring
0b473486cf is described below
commit 0b473486cf917a663ac973dc92849896a9007b6f
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Tue Dec 9 21:27:07 2025 +0100
test: refactoring
Try to restructure test so a test is testing a specific component.
---
.../form-check/form-check.test.js} | 0
.../form-check/form-check.xhtml} | 2 +
.../disabled-entries}/Disabled_entries.test.js | 16 --
.../disabled-entries}/Disabled_entries.xhtml | 11 --
.../no-entries}/No_entries.test.js | 28 ---
.../no-entries}/No_entries.xhtml | 6 -
.../Server_side_filtering.test.js | 188 +++++++++++++++++++++
.../Server_side_filtering.xhtml} | 19 ---
.../disabled-entries}/Disabled_entries.test.js | 16 --
.../disabled-entries}/Disabled_entries.xhtml | 11 --
.../no-entries}/No_entries.test.js | 28 ---
.../no-entries/No_entries.xhtml} | 6 +-
.../Server_side_filtering.test.js} | 144 ----------------
.../Server_side_filtering.xhtml} | 19 ---
14 files changed, 194 insertions(+), 300 deletions(-)
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.test.js
similarity index 100%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.test.js
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
similarity index 98%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
index 93efc0ebec..603058fd85 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
@@ -22,6 +22,8 @@
xmlns:tc="http://myfaces.apache.org/tobago/component"
xmlns:ui="jakarta.faces.facelets">
+ <p>Test .form-check components which are checkboxes, toggles and radio buttons.</p>
+
<tc:section label="tc:selectBooleanCheckbox">
<tc:flexLayout columns="auto">
<tc:selectBooleanCheckbox id="selectBooleanCheckbox" value="false"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
similarity index 65%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
index f831454377..972f5bd538 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
@@ -17,14 +17,6 @@
import {querySelectorFn} from "/script/tobago-test.js";
-it("SelectOneList expanded=false: colors of list entries", function () {
- const entry1 = querySelectorFn("[id='page:mainForm:selectOneList'] tr[data-tobago-value='1'] td[value='1']");
- const entry2 = querySelectorFn("[id='page:mainForm:selectOneList'] tr[data-tobago-value='2'] td[value='2']");
-
- expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
- expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
it("SelectManyList expanded=false: colors of list entries", function () {
const entry1 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='1'] td[value='1']");
const entry2 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='2'] td[value='2']");
@@ -33,14 +25,6 @@ it("SelectManyList expanded=false: colors of list entries", function () {
expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
});
-it("SelectOneList expanded=true: colors of list entries", function () {
- const entry1 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='1'] td[value='1']");
- const entry2 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='2'] td[value='2']");
-
- expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
- expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
it("SelectManyList expanded=true: colors of list entries", function () {
const entry1 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='1'] td[value='1']");
const entry2 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='2'] td[value='2']");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
similarity index 77%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
index 7bf7d1f4df..3b39e1eeb7 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
@@ -21,22 +21,11 @@
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tc="http://myfaces.apache.org/tobago/component"
xmlns:ui="jakarta.faces.facelets">
-
- <tc:selectOneList id="selectOneList">
- <tc:selectItem itemValue="1" itemLabel="Entry One"/>
- <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
- </tc:selectOneList>
-
<tc:selectManyList id="selectManyList">
<tc:selectItem itemValue="1" itemLabel="Entry One"/>
<tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
</tc:selectManyList>
- <tc:selectOneList id="selectOneListExpanded" expanded="true">
- <tc:selectItem itemValue="1" itemLabel="Entry One"/>
- <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
- </tc:selectOneList>
-
<tc:selectManyList id="selectManyListExpanded" expanded="true">
<tc:selectItem itemValue="1" itemLabel="Entry One"/>
<tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
similarity index 61%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
index ebfa94b6ca..a4dc92670e 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
@@ -18,34 +18,6 @@
import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
import {elementByIdFn, querySelectorFn} from "/script/tobago-test.js";
-it("SelectOneList: no-entries hint after leaving", function (done) {
- const rootComponent = elementByIdFn("page:mainForm:selectOneList");
- const selectField = elementByIdFn("page:mainForm:selectOneList::selectField");
- const filterInput = elementByIdFn("page:mainForm:selectOneList::filter");
- const dropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectOneList']");
- const noEntriesFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectOneList'] .tobago-no-entries");
-
- const test = new JasmineTestTool(done);
- test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
- test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
- test.do(() => expect(dropdownMenu().classList).toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("blur", filterInput, () => !rootComponent().classList.contains("tobago-focus"));
- test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
- test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
- test.do(() => expect(dropdownMenu().classList).toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.start();
-});
-
it("SelectManyList: no-entries hint after leaving", function (done) {
const rootComponent = elementByIdFn("page:mainForm:selectManyList");
const selectField = elementByIdFn("page:mainForm:selectManyList::selectField");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
similarity index 89%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
index 50293dfc5e..beab179c83 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
@@ -21,12 +21,6 @@
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tc="http://myfaces.apache.org/tobago/component"
xmlns:ui="jakarta.faces.facelets">
-
- <tc:selectOneList id="selectOneList">
- <tc:selectItem itemValue="Entry One"/>
- <tc:selectItem itemValue="Entry Two"/>
- </tc:selectOneList>
-
<tc:selectManyList id="selectManyList">
<tc:selectItem itemValue="Entry One"/>
<tc:selectItem itemValue="Entry Two"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js
new file mode 100644
index 0000000000..65af83daa9
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
+import {elementByIdFn, querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
+
+it("SelectManyList minChar=3: leaving component", function (done) {
+ const minChar3 = elementByIdFn("page:mainForm:minChar3");
+ const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+ const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+ const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+ const rheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Rhea']");
+ const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
+ const customFooterCell = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer td");
+
+ let timestamp;
+
+ const test = new JasmineTestTool(done);
+ test.do(() => timestamp = currentTimestamp());
+ test.event("click", minChar3, () => currentTimestamp() > timestamp);
+ test.do(() => expect(tobagoSelectItems().length).toBe(0));
+ test.do(() => expect(customFooter().textContent.trim()).toBe("type 3 character for results"));
+ test.do(() => filterInput().value = "hea");
+ test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+ test.do(() => expect(tobagoSelectItems().length).toBe(3));
+ test.do(() => expect(getComputedStyle(customFooterCell()).display).toBe("none"));
+ test.event("click", rheaSelectItem, () => badges().length === 1);
+ test.do(() => expect(badges()[0].dataset.tobagoValue).toBe("Rhea"));
+ test.do(() => expect(tobagoSelectItems().length).toBe(3));
+ test.event("blur", filterInput, () => tobagoSelectItems().length === 0);
+ test.do(() => expect(tobagoSelectItems().length).toBe(0));
+ test.start();
+});
+
+it("SelectManyList: avoid 'no valid selection' error", function (done) {
+ const reset = elementByIdFn("page:mainForm:reset");
+ const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+ const firstBadge = querySelectorFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group > .badge");
+ const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+ const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+ const lysitheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Lysithea']");
+ const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+ const popover = querySelectorFn("tobago-select-many-list[id='page:mainForm:selectManyList'] tobago-popover");
+
+ const test = new JasmineTestTool(done);
+ test.setup(() => badges().length === 0
+ && tobagoSelectItems().length === 0
+ && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+ null, "click", reset);
+ test.do(() => filterInput().value = "y");
+ test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+ test.event("click", lysitheaSelectItem, () => badges().length > 0);
+ test.do(() => expect(firstBadge().textContent).toBe("Lysithea"));
+ test.event("click", reset, () => badges().length === 0);
+ test.do(() => expect(popover()).toBeNull());
+ test.start();
+});
+
+it("SelectManyList: footer must be visible for an empty list", function (done) {
+ const reset = elementByIdFn("page:mainForm:reset");
+ const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+ const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+ const tobagoDropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
+ const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+ const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
+ const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+
+ const test = new JasmineTestTool(done);
+ test.setup(() => badges().length === 0
+ && !tobagoDropdownMenu().classList.contains("show")
+ && tobagoSelectItems().length === 0
+ && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+ null, "click", reset);
+ test.do(() => expect(badges().length).toBe(0));
+ test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeFalse());
+ test.do(() => expect(tobagoSelectItems().length).toBe(0));
+ test.event("input", filterInput, () => tobagoDropdownMenu().classList.contains("show"));
+ test.do(() => expect(badges().length).toBe(0));
+ test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeTrue());
+ test.do(() => expect(tobagoSelectItems().length).toBe(0));
+ test.do(() => expect(customFooter().textContent.trim()).toBe("filter for results"));
+ test.start();
+});
+
+it("SelectManyList: ajax listener", function (done) {
+ const reset = elementByIdFn("page:mainForm:reset");
+ const selectField = querySelectorFn("#page\\:mainForm\\:selectManyList\\:\\:selectField");
+ const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+ const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+ const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+ const thebeSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Thebe']");
+ const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+
+ const test = new JasmineTestTool(done);
+ test.setup(() => changeCount() === 0
+ && clickCount() === 0
+ && dblclickCount() === 0
+ && focusCount() === 0
+ && blurCount() === 0
+ && badges().length === 0
+ && tobagoSelectItems().length === 0
+ && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+ null, "click", reset);
+ test.event("click", selectField, () => clickCount() >= 1);
+ test.do(() => expect(changeCount()).toBe(0));
+ test.do(() => expect(clickCount()).toBe(1));
+ test.do(() => expect(dblclickCount()).toBe(0));
+ test.do(() => expect(focusCount()).toBe(1));
+ test.do(() => expect(blurCount()).toBe(0));
+ test.event("dblclick", selectField, () => dblclickCount() >= 1);
+ test.do(() => expect(changeCount()).toBe(0));
+ test.do(() => expect(clickCount()).toBe(1));
+ test.do(() => expect(dblclickCount()).toBe(1));
+ test.do(() => expect(focusCount()).toBe(1));
+ test.do(() => expect(blurCount()).toBe(0));
+ test.event("focus", reset, () => blurCount() >= 1);
+ test.do(() => expect(changeCount()).toBe(0));
+ test.do(() => expect(clickCount()).toBe(1));
+ test.do(() => expect(dblclickCount()).toBe(1));
+ test.do(() => expect(focusCount()).toBe(1));
+ test.do(() => expect(blurCount()).toBe(1));
+ test.event("click", filterInput, () => clickCount() >= 2);
+ test.do(() => expect(changeCount()).toBe(0));
+ test.do(() => expect(clickCount()).toBe(2));
+ test.do(() => expect(dblclickCount()).toBe(1));
+ test.do(() => expect(focusCount()).toBe(2));
+ test.do(() => expect(blurCount()).toBe(1));
+ test.do(() => filterInput().value = "b");
+ test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+ test.event("click", thebeSelectItem, () => badges().length > 0);
+ test.do(() => expect(changeCount()).toBe(1));
+ test.do(() => expect(clickCount()).toBe(3));
+ test.do(() => expect(dblclickCount()).toBe(1));
+ test.do(() => expect(focusCount()).toBe(2));
+ test.do(() => expect(blurCount()).toBe(1));
+ test.event("dblclick", selectField, () => dblclickCount() >= 2);
+ test.do(() => expect(changeCount()).toBe(1));
+ test.do(() => expect(clickCount()).toBe(3));
+ test.do(() => expect(dblclickCount()).toBe(2));
+ test.do(() => expect(focusCount()).toBe(2));
+ test.do(() => expect(blurCount()).toBe(1));
+ test.event("focus", reset, () => blurCount() >= 2);
+ test.do(() => expect(changeCount()).toBe(1));
+ test.do(() => expect(clickCount()).toBe(3));
+ test.do(() => expect(dblclickCount()).toBe(2));
+ test.do(() => expect(focusCount()).toBe(2));
+ test.do(() => expect(blurCount()).toBe(2));
+ test.start();
+});
+
+function currentTimestamp() {
+ const timestampOut = querySelectorFn("#page\\:mainForm\\:timestamp .form-control-plaintext");
+ return Number(timestampOut().textContent);
+}
+
+function changeCount() {
+ return parseInt(querySelectorFn("#page\\:mainForm\\:changeCounter .form-control-plaintext")().textContent);
+}
+
+function clickCount() {
+ return parseInt(querySelectorFn("#page\\:mainForm\\:clickCounter .form-control-plaintext")().textContent);
+}
+
+function dblclickCount() {
+ return parseInt(querySelectorFn("#page\\:mainForm\\:dblclickCounter .form-control-plaintext")().textContent);
+}
+
+function focusCount() {
+ return parseInt(querySelectorFn("#page\\:mainForm\\:focusCounter .form-control-plaintext")().textContent);
+}
+
+function blurCount() {
+ return parseInt(querySelectorFn("#page\\:mainForm\\:blurCounter .form-control-plaintext")().textContent);
+}
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
similarity index 71%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
index 4864be1ff9..434d95d56a 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
@@ -37,25 +37,6 @@
<tc:out id="blurCounter" label="blur" value="#{selectListServerFilterController.blurCounter}" labelLayout="top"/>
</tc:panel>
- <tc:selectOneList id="selectOneList" label="selectOneList"
- value="#{selectListServerFilterController.selectedSolarObject}"
- footer="#{selectListServerFilterController.footerTextOne}">
- <tc:selectItemsFiltered id="selectItemsFilteredOne" value="#{selectListServerFilterController.solarObjectsOne}"
- var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"
- query="#{selectListServerFilterController.queryOne}"
- minimumCharacters="#{selectListServerFilterController.minChar}">
- </tc:selectItemsFiltered>
- <f:ajax render="statistics outputSelectOneList" listener="#{selectListServerFilterController.changeAjaxListener}"/>
- <f:ajax event="click" render="statistics" listener="#{selectListServerFilterController.clickAjaxListener}"/>
- <f:ajax event="dblclick" render="statistics" listener="#{selectListServerFilterController.dblclickAjaxListener}"/>
- <f:ajax event="focus" render="statistics" listener="#{selectListServerFilterController.focusAjaxListener}"/>
- <f:ajax event="blur" render="statistics" listener="#{selectListServerFilterController.blurAjaxListener}"/>
- </tc:selectOneList>
- <tc:out id="outputSelectOneList" label="Selected"
- value="#{selectListServerFilterController.selectedSolarObjectString}"/>
-
- <tc:separator/>
-
<tc:out id="outputSelectManyList" label="Selected"
value="#{selectListServerFilterController.selectedSolarObjectsString}"/>
<tc:selectManyList id="selectManyList" label="selectManyList"
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
similarity index 65%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
index f831454377..b06a8dbf26 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
@@ -25,14 +25,6 @@ it("SelectOneList expanded=false: colors of list entries", function () {
expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
});
-it("SelectManyList expanded=false: colors of list entries", function () {
- const entry1 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='1'] td[value='1']");
- const entry2 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='2'] td[value='2']");
-
- expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
- expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
it("SelectOneList expanded=true: colors of list entries", function () {
const entry1 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='1'] td[value='1']");
const entry2 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='2'] td[value='2']");
@@ -40,11 +32,3 @@ it("SelectOneList expanded=true: colors of list entries", function () {
expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
});
-
-it("SelectManyList expanded=true: colors of list entries", function () {
- const entry1 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='1'] td[value='1']");
- const entry2 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='2'] td[value='2']");
-
- expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
- expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
similarity index 77%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
index 7bf7d1f4df..0c77a53fba 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
@@ -21,24 +21,13 @@
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tc="http://myfaces.apache.org/tobago/component"
xmlns:ui="jakarta.faces.facelets">
-
<tc:selectOneList id="selectOneList">
<tc:selectItem itemValue="1" itemLabel="Entry One"/>
<tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
</tc:selectOneList>
- <tc:selectManyList id="selectManyList">
- <tc:selectItem itemValue="1" itemLabel="Entry One"/>
- <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
- </tc:selectManyList>
-
<tc:selectOneList id="selectOneListExpanded" expanded="true">
<tc:selectItem itemValue="1" itemLabel="Entry One"/>
<tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
</tc:selectOneList>
-
- <tc:selectManyList id="selectManyListExpanded" expanded="true">
- <tc:selectItem itemValue="1" itemLabel="Entry One"/>
- <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
- </tc:selectManyList>
</ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
similarity index 61%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
index ebfa94b6ca..dc581cfcf5 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
@@ -45,31 +45,3 @@ it("SelectOneList: no-entries hint after leaving", function (done) {
test.start();
});
-
-it("SelectManyList: no-entries hint after leaving", function (done) {
- const rootComponent = elementByIdFn("page:mainForm:selectManyList");
- const selectField = elementByIdFn("page:mainForm:selectManyList::selectField");
- const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
- const dropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
- const noEntriesFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-no-entries");
-
- const test = new JasmineTestTool(done);
- test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
- test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
- test.do(() => expect(dropdownMenu().classList).toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("blur", filterInput, () => !rootComponent().classList.contains("tobago-focus"));
- test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
- test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
- test.do(() => expect(dropdownMenu().classList).toContain("show"));
- test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
- test.start();
-});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
similarity index 87%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
index 5179ac4aea..4b24e935fd 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
@@ -21,6 +21,8 @@
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tc="http://myfaces.apache.org/tobago/component"
xmlns:ui="jakarta.faces.facelets">
-
- <p>Tests for both tc:selectOneList and tc:selectManyList</p>
+ <tc:selectOneList id="selectOneList">
+ <tc:selectItem itemValue="Entry One"/>
+ <tc:selectItem itemValue="Entry Two"/>
+ </tc:selectOneList>
</ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
similarity index 58%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
index 473f4bda96..212c55906c 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
@@ -76,34 +76,6 @@ it("SelectOneList minChar=3: leaving component", function (done) {
test.start();
});
-it("SelectManyList minChar=3: leaving component", function (done) {
- const minChar3 = elementByIdFn("page:mainForm:minChar3");
- const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
- const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
- const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
- const rheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Rhea']");
- const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
- const customFooterCell = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer td");
-
- let timestamp;
-
- const test = new JasmineTestTool(done);
- test.do(() => timestamp = currentTimestamp());
- test.event("click", minChar3, () => currentTimestamp() > timestamp);
- test.do(() => expect(tobagoSelectItems().length).toBe(0));
- test.do(() => expect(customFooter().textContent.trim()).toBe("type 3 character for results"));
- test.do(() => filterInput().value = "hea");
- test.event("input", filterInput, () => tobagoSelectItems().length > 0);
- test.do(() => expect(tobagoSelectItems().length).toBe(3));
- test.do(() => expect(getComputedStyle(customFooterCell()).display).toBe("none"));
- test.event("click", rheaSelectItem, () => badges().length === 1);
- test.do(() => expect(badges()[0].dataset.tobagoValue).toBe("Rhea"));
- test.do(() => expect(tobagoSelectItems().length).toBe(3));
- test.event("blur", filterInput, () => tobagoSelectItems().length === 0);
- test.do(() => expect(tobagoSelectItems().length).toBe(0));
- test.start();
-});
-
it("SelectOneList: avoid 'no valid selection' error", function (done) {
const reset = elementByIdFn("page:mainForm:reset");
const span = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField span");
@@ -128,30 +100,6 @@ it("SelectOneList: avoid 'no valid selection' error", function (done) {
test.start();
});
-it("SelectManyList: avoid 'no valid selection' error", function (done) {
- const reset = elementByIdFn("page:mainForm:reset");
- const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
- const firstBadge = querySelectorFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group > .badge");
- const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
- const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
- const lysitheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Lysithea']");
- const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
- const popover = querySelectorFn("tobago-select-many-list[id='page:mainForm:selectManyList'] tobago-popover");
-
- const test = new JasmineTestTool(done);
- test.setup(() => badges().length === 0
- && tobagoSelectItems().length === 0
- && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
- null, "click", reset);
- test.do(() => filterInput().value = "y");
- test.event("input", filterInput, () => tobagoSelectItems().length > 0);
- test.event("click", lysitheaSelectItem, () => badges().length > 0);
- test.do(() => expect(firstBadge().textContent).toBe("Lysithea"));
- test.event("click", reset, () => badges().length === 0);
- test.do(() => expect(popover()).toBeNull());
- test.start();
-});
-
it("SelectOneList: footer must be visible for an empty list", function (done) {
const reset = elementByIdFn("page:mainForm:reset");
const span = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField span");
@@ -178,32 +126,6 @@ it("SelectOneList: footer must be visible for an empty list", function (done) {
test.start();
});
-it("SelectManyList: footer must be visible for an empty list", function (done) {
- const reset = elementByIdFn("page:mainForm:reset");
- const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
- const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
- const tobagoDropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
- const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
- const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
- const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
-
- const test = new JasmineTestTool(done);
- test.setup(() => badges().length === 0
- && !tobagoDropdownMenu().classList.contains("show")
- && tobagoSelectItems().length === 0
- && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
- null, "click", reset);
- test.do(() => expect(badges().length).toBe(0));
- test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeFalse());
- test.do(() => expect(tobagoSelectItems().length).toBe(0));
- test.event("input", filterInput, () => tobagoDropdownMenu().classList.contains("show"));
- test.do(() => expect(badges().length).toBe(0));
- test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeTrue());
- test.do(() => expect(tobagoSelectItems().length).toBe(0));
- test.do(() => expect(customFooter().textContent.trim()).toBe("filter for results"));
- test.start();
-});
-
it("SelectOneList: ajax listener", function (done) {
const reset = elementByIdFn("page:mainForm:reset");
const selectField = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField");
@@ -270,72 +192,6 @@ it("SelectOneList: ajax listener", function (done) {
test.start();
});
-it("SelectManyList: ajax listener", function (done) {
- const reset = elementByIdFn("page:mainForm:reset");
- const selectField = querySelectorFn("#page\\:mainForm\\:selectManyList\\:\\:selectField");
- const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
- const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
- const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
- const thebeSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Thebe']");
- const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
-
- const test = new JasmineTestTool(done);
- test.setup(() => changeCount() === 0
- && clickCount() === 0
- && dblclickCount() === 0
- && focusCount() === 0
- && blurCount() === 0
- && badges().length === 0
- && tobagoSelectItems().length === 0
- && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
- null, "click", reset);
- test.event("click", selectField, () => clickCount() >= 1);
- test.do(() => expect(changeCount()).toBe(0));
- test.do(() => expect(clickCount()).toBe(1));
- test.do(() => expect(dblclickCount()).toBe(0));
- test.do(() => expect(focusCount()).toBe(1));
- test.do(() => expect(blurCount()).toBe(0));
- test.event("dblclick", selectField, () => dblclickCount() >= 1);
- test.do(() => expect(changeCount()).toBe(0));
- test.do(() => expect(clickCount()).toBe(1));
- test.do(() => expect(dblclickCount()).toBe(1));
- test.do(() => expect(focusCount()).toBe(1));
- test.do(() => expect(blurCount()).toBe(0));
- test.event("focus", reset, () => blurCount() >= 1);
- test.do(() => expect(changeCount()).toBe(0));
- test.do(() => expect(clickCount()).toBe(1));
- test.do(() => expect(dblclickCount()).toBe(1));
- test.do(() => expect(focusCount()).toBe(1));
- test.do(() => expect(blurCount()).toBe(1));
- test.event("click", filterInput, () => clickCount() >= 2);
- test.do(() => expect(changeCount()).toBe(0));
- test.do(() => expect(clickCount()).toBe(2));
- test.do(() => expect(dblclickCount()).toBe(1));
- test.do(() => expect(focusCount()).toBe(2));
- test.do(() => expect(blurCount()).toBe(1));
- test.do(() => filterInput().value = "b");
- test.event("input", filterInput, () => tobagoSelectItems().length > 0);
- test.event("click", thebeSelectItem, () => badges().length > 0);
- test.do(() => expect(changeCount()).toBe(1));
- test.do(() => expect(clickCount()).toBe(3));
- test.do(() => expect(dblclickCount()).toBe(1));
- test.do(() => expect(focusCount()).toBe(2));
- test.do(() => expect(blurCount()).toBe(1));
- test.event("dblclick", selectField, () => dblclickCount() >= 2);
- test.do(() => expect(changeCount()).toBe(1));
- test.do(() => expect(clickCount()).toBe(3));
- test.do(() => expect(dblclickCount()).toBe(2));
- test.do(() => expect(focusCount()).toBe(2));
- test.do(() => expect(blurCount()).toBe(1));
- test.event("focus", reset, () => blurCount() >= 2);
- test.do(() => expect(changeCount()).toBe(1));
- test.do(() => expect(clickCount()).toBe(3));
- test.do(() => expect(dblclickCount()).toBe(2));
- test.do(() => expect(focusCount()).toBe(2));
- test.do(() => expect(blurCount()).toBe(2));
- test.start();
-});
-
function currentTimestamp() {
const timestampOut = querySelectorFn("#page\\:mainForm\\:timestamp .form-control-plaintext");
return Number(timestampOut().textContent);
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
similarity index 71%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
index 4864be1ff9..828d122841 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
@@ -53,23 +53,4 @@
</tc:selectOneList>
<tc:out id="outputSelectOneList" label="Selected"
value="#{selectListServerFilterController.selectedSolarObjectString}"/>
-
- <tc:separator/>
-
- <tc:out id="outputSelectManyList" label="Selected"
- value="#{selectListServerFilterController.selectedSolarObjectsString}"/>
- <tc:selectManyList id="selectManyList" label="selectManyList"
- value="#{selectListServerFilterController.selectedSolarObjects}"
- footer="#{selectListServerFilterController.footerTextMany}">
- <tc:selectItemsFiltered id="selectItemsFilteredMany" value="#{selectListServerFilterController.solarObjectsMany}"
- var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"
- query="#{selectListServerFilterController.queryMany}"
- minimumCharacters="#{selectListServerFilterController.minChar}">
- </tc:selectItemsFiltered>
- <f:ajax render="statistics outputSelectManyList" listener="#{selectListServerFilterController.changeAjaxListener}"/>
- <f:ajax event="click" render="statistics" listener="#{selectListServerFilterController.clickAjaxListener}"/>
- <f:ajax event="dblclick" render="statistics" listener="#{selectListServerFilterController.dblclickAjaxListener}"/>
- <f:ajax event="focus" render="statistics" listener="#{selectListServerFilterController.focusAjaxListener}"/>
- <f:ajax event="blur" render="statistics" listener="#{selectListServerFilterController.blurAjaxListener}"/>
- </tc:selectManyList>
</ui:composition>