You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by vo...@apache.org on 2023/01/11 15:33:49 UTC

[myfaces] branch main updated: Do not set disabled inputs as submitted values

This is an automated email from the ASF dual-hosted git repository.

volosied 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 80183a156 Do not set disabled inputs as submitted values
     new 5e047783c Merge pull request #474 from volosied/MYFACES-4544
80183a156 is described below

commit 80183a15649eaeab97585e2591454443a8e38339
Author: Volodymyr Siedlecki <vo...@gmail.com>
AuthorDate: Tue Jan 10 16:04:44 2023 -0500

    Do not set disabled inputs as submitted values
---
 .../renderkit/html/util/HtmlRendererUtils.java     | 45 ++++++++++++++++++++--
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
index 2f6275632..3344fb08a 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/HtmlRendererUtils.java
@@ -19,6 +19,7 @@
 package org.apache.myfaces.renderkit.html.util;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -43,6 +44,7 @@ import jakarta.faces.component.UISelectBoolean;
 import jakarta.faces.component.UISelectMany;
 import jakarta.faces.component.UISelectOne;
 import jakarta.faces.component.UIViewRoot;
+import jakarta.faces.component.ValueHolder;
 import jakarta.faces.component.behavior.ClientBehavior;
 import jakarta.faces.component.behavior.ClientBehaviorContext;
 import jakarta.faces.component.behavior.ClientBehaviorHolder;
@@ -211,8 +213,27 @@ public final class HtmlRendererUtils
         
         if (paramValuesMap.containsKey(clientId))
         {
-            String[] reqValues = (String[]) paramValuesMap.get(clientId);
-            ((EditableValueHolder) component).setSubmittedValue(reqValues);
+            ArrayList<String> reqValues = new ArrayList<String>(Arrays.asList((String[]) paramValuesMap.get(clientId)));
+
+            List<SelectItemInfo> selections = SelectItemsUtils.getSelectItemInfoList(
+                (UISelectMany) component, facesContext);
+
+            // if disabled value is submitted, do not use it
+            for(SelectItemInfo itemInfo: selections)
+            {
+                if(itemInfo.getItem().isDisabled())
+                {
+                    String result = SharedRendererUtils.getConvertedStringValue(
+                        facesContext,component,((ValueHolder) component).getConverter(), itemInfo.getItem().getValue());
+                    if(reqValues.contains(result))
+                    {
+                        reqValues.remove(result);
+                    }
+                }
+            }
+            // submitted value needs to be of type String[]
+            String[] submittedValue = (String[]) reqValues.toArray(new String[reqValues.size()]);
+            ((EditableValueHolder) component).setSubmittedValue(submittedValue);
         }
         else
         {
@@ -278,8 +299,26 @@ public final class HtmlRendererUtils
         String clientId = component.getClientId(facesContext);
         if (paramMap.containsKey(clientId))
         {
+            String submittedValue = (String) paramMap.get(clientId); 
+            List<SelectItemInfo> selections = SelectItemsUtils.getSelectItemInfoList(
+                (UISelectOne) component, facesContext);
+
+            // if disabled value is submitted, do not use it
+            for(SelectItemInfo itemInfo: selections)
+            {
+                if(itemInfo.getItem().isDisabled())
+                {
+                    Object selectItemValue = itemInfo.getItem().getValue();
+                    String convertedValue = SharedRendererUtils.getConvertedStringValue(
+                        facesContext,component,((ValueHolder) component).getConverter(), selectItemValue);
+                    if(convertedValue.equals(selectItemValue))
+                    {   // disabled value matches submitted value
+                        submittedValue = RendererUtils.EMPTY_STRING;
+                    }
+                }
+            }
             //request parameter found, set submitted value
-            ((EditableValueHolder) component).setSubmittedValue(paramMap.get(clientId));
+            ((EditableValueHolder) component).setSubmittedValue(submittedValue);
         }
         else
         {