You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2021/03/30 08:49:35 UTC

[myfaces] branch master updated: MYFACES-4386 / Faces 4.0: h:inputFile accept="..."

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

tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/master by this push:
     new df0e681  MYFACES-4386 / Faces 4.0: h:inputFile accept="..."
df0e681 is described below

commit df0e68187792424ab3bfa8ff6818a4516685824f
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Tue Mar 30 10:49:26 2021 +0200

    MYFACES-4386 / Faces 4.0: h:inputFile accept="..."
---
 .../faces/component/html/_HtmlInputFile.java       |  9 ++++
 .../html/base/HtmlInputFileRendererBase.java       | 55 +++++-----------------
 2 files changed, 20 insertions(+), 44 deletions(-)

diff --git a/api/src/main/java/jakarta/faces/component/html/_HtmlInputFile.java b/api/src/main/java/jakarta/faces/component/html/_HtmlInputFile.java
index 173ed88..eb71d58 100644
--- a/api/src/main/java/jakarta/faces/component/html/_HtmlInputFile.java
+++ b/api/src/main/java/jakarta/faces/component/html/_HtmlInputFile.java
@@ -74,6 +74,15 @@ abstract class _HtmlInputFile extends UIInput implements _AccesskeyProperty,
     @JSFProperty
     public abstract String getAutocomplete();
 
+    /**
+     * Comma separated string of mime types of files to filter in client side file browse dialog.
+     * NOTE: this is not validated in server side.
+     *
+     * @return
+     */
+    @JSFProperty
+    public abstract String getAccept();
+
     @Override
     protected void validateValue(FacesContext context, Object convertedValue)
     {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
index 9e4fdca..27578d8 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
@@ -44,9 +44,8 @@ import jakarta.faces.component.UIViewRoot;
 import jakarta.faces.component.behavior.ClientBehavior;
 import jakarta.faces.component.behavior.ClientBehaviorHolder;
 import jakarta.faces.component.html.HtmlForm;
-import jakarta.faces.component.html.HtmlInputText;
+import jakarta.faces.component.html.HtmlInputFile;
 import org.apache.myfaces.core.api.shared.ComponentUtils;
-import org.apache.myfaces.renderkit.RendererUtils;
 
 import org.apache.myfaces.renderkit.html.util.HttpPartWrapper;
 import org.apache.myfaces.renderkit.html.util.HTML;
@@ -119,15 +118,6 @@ public class HtmlInputFileRendererBase extends HtmlRenderer
         return submittedValue;
     }
 
-    /**
-     * Returns the HTML type attribute of HTML input element, which is being rendered.
-     */
-    protected String getInputHtmlType(UIComponent component)
-    {
-        //subclasses may act on properties of the component
-        return HTML.INPUT_TYPE_FILE;
-    }
-
     protected void renderValue(FacesContext facesContext, UIComponent component, ResponseWriter writer)
             throws IOException
     {
@@ -157,10 +147,7 @@ public class HtmlInputFileRendererBase extends HtmlRenderer
         writer.startElement(HTML.INPUT_ELEM, component);
         writer.writeAttribute(HTML.ID_ATTR, clientId, null);
         writer.writeAttribute(HTML.NAME_ATTR, clientId, null);
-        
-        //allow extending classes to modify html input element's type
-        String inputHtmlType = getInputHtmlType(component);
-        writer.writeAttribute(HTML.TYPE_ATTR, inputHtmlType, null);
+        writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_FILE, null);
 
         renderValue(facesContext, component, writer);
 
@@ -226,49 +213,29 @@ public class HtmlInputFileRendererBase extends HtmlRenderer
             }
         }
 
-        if (isDisabled(facesContext, component))
+        HtmlInputFile inputFile = (HtmlInputFile) component;
+        
+        if (inputFile.isDisabled())
         {
             writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
         }
 
-        if (isAutocompleteOff(facesContext, component))
+        if (AUTOCOMPLETE_VALUE_OFF.equals(inputFile.getAutocomplete()))
         {
             writer.writeAttribute(HTML.AUTOCOMPLETE_ATTR, AUTOCOMPLETE_VALUE_OFF, HTML.AUTOCOMPLETE_ATTR);
         }
-    }
-
-    protected void renderInputEnd(FacesContext facesContext, UIComponent component) throws IOException
-    {
-        ResponseWriter writer = facesContext.getResponseWriter(); 
-
-        writer.endElement(HTML.INPUT_ELEM);
-    }
 
-    protected boolean isDisabled(FacesContext facesContext, UIComponent component)
-    {
-        if (component instanceof HtmlInputText)
+        if (inputFile.getAccept() != null)
         {
-            return ((HtmlInputText)component).isDisabled();
+            writer.writeAttribute(HTML.ACCEPT_ATTR, inputFile.getAccept(), HTML.ACCEPT_ATTR);
         }
-
-        return RendererUtils.getBooleanAttribute(component, HTML.DISABLED_ATTR, false);
     }
 
-    /**
-     * If autocomplete is "on" or not set, do not render it
-     */
-    protected boolean isAutocompleteOff(FacesContext facesContext, UIComponent component)
+    protected void renderInputEnd(FacesContext facesContext, UIComponent component) throws IOException
     {
-        if (component instanceof HtmlInputText)
-        {
-            String autocomplete = ((HtmlInputText)component).getAutocomplete();
-            if (autocomplete != null)
-            {
-                return autocomplete.equals(AUTOCOMPLETE_VALUE_OFF);
-            }
-        }
+        ResponseWriter writer = facesContext.getResponseWriter(); 
 
-        return false;
+        writer.endElement(HTML.INPUT_ELEM);
     }
 
     public static void renderOutputText(FacesContext facesContext, UIComponent component, String text, boolean escape)