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

Werner Punz commented on MYFACES-4716:
--------------------------------------

Ok found it, the 4.0.2 exposes the problem 4.0.3-SNAPSHOT not anymore. 
Apparently we have fixed the issue along the lines, here are my results from 
4.0.2! That was an easy fix. So the fix is to upgrade to 4.0.3!

SCHWERWIEGEND: java.lang.NullPointerException occured while processing 
PROCESS_VALIDATIONS [Location=]
java.lang.NullPointerException: Cannot invoke "Object.equals(Object)" because 
"value" is null
        at 
org.apache.myfaces.core.api.shared.SelectItemsUtil.matchValue(SelectItemsUtil.java:235)
        at 
jakarta.faces.component.UISelectMany.validateValue(UISelectMany.java:332)
        at jakarta.faces.component.UIInput.validate(UIInput.java:717)
        at jakarta.faces.component.UIInput.processValidators(UIInput.java:297)
        at 
org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:717)
        at 
org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:226)
        at jakarta.faces.component.UIComponent.visitTree(UIComponent.java:880)
        at 
jakarta.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1120)
        at jakarta.faces.component.UIForm.visitTree(UIForm.java:343)


> 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
>            Assignee: Werner Punz
>            Priority: Major
>
> 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)

Reply via email to