Gordon Freeman created MYFACES-4716: ---------------------------------------
Summary: Ajax is not working for empty selection for h:selectManyListbox Key: MYFACES-4716 URL: https://issues.apache.org/jira/browse/MYFACES-4716 Project: MyFaces Core Issue Type: Bug Affects Versions: 4.0.2 Reporter: Gordon Freeman I have multiselect on the form: {code} <h:selectManyListbox id="someId" value="#{myBackingBean.valueList}"> <f:selectItems value="${myBackingBean.valueSelectItems}" /> <f:ajax execute="@this" render="someOtherId" event="valueChange" listener="#{myBackingBean.valueChanged}"/> </h:selectManyListbox> {code} When I deselect the last option in the multiselect I expect the empty list to be setted to the backing bean _valueList_ and the _valueChanged_ method to be called. But the _valueChanged_ method is not called and a crash occurs at the validation stage due to NPE. {code} org.apache.myfaces.core.api.shared.SelectItemsUtil.matchValue(SelectItemsUtil.java:235) jakarta.faces.component.UISelectMany.validateValue(UISelectMany.java:332) jakarta.faces.component.UIInput.validate(UIInput.java:717) jakarta.faces.component.UIInput.processValidators(UIInput.java:297) org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:717) org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:226) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:880) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:908) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:908) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:908) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:908) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) jakarta.faces.component.UIForm.visitTree(UIForm.java:343) jakarta.faces.component.UIComponent.visitTree(UIComponent.java:908) jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120) org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialExecute(PartialViewContextImpl.java:407) org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:388) jakarta.faces.component.UIViewRoot$ProcessValidatorPhaseProcessor.process(UIViewRoot.java:1857) jakarta.faces.component.UIViewRoot._process(UIViewRoot.java:1714) jakarta.faces.component.UIViewRoot.processValidators(UIViewRoot.java:972) org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:39) org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:172) org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:125) jakarta.faces.webapp.FacesServlet.service(FacesServlet.java:223) {code} According to the _HtmlRendererUtils.decodeUISelectMany_ method, when posting an empty multiselect, no parameters for this multiselect should be sent to the server. But the parameter is sent - it is an empty string. It is filled in _XhrRequest.ts_ when calling _this.appendIssuingItem(formData);_ I think this is a bug (probably introduced in MYFACES-4606) in js and with an empty multiselect the parameter should not be sent in the POST request. And the current behavior is as if an option with an empty value was selected in the multiselect, _submittedValue_ is an array of one element - an empty string, instead of empty array. -- This message was sent by Atlassian Jira (v8.20.10#820010)