You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2010/06/14 15:40:54 UTC

svn commit: r954464 - in /myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html: HtmlSecretRendererBase.java HtmlTextRendererBase.java HtmlTextareaRendererBase.java

Author: jakobk
Date: Mon Jun 14 13:40:54 2010
New Revision: 954464

URL: http://svn.apache.org/viewvc?rev=954464&view=rev
Log:
MYFACES-2746 Subdivide methods of HtmlTextRendererBase, HtmlTextareaRendererBase and HtmlSecretRendererBase into extendable parts (Thanks to Ali Ok for this patch)

Modified:
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlSecretRendererBase.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextareaRendererBase.java

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlSecretRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlSecretRendererBase.java?rev=954464&r1=954463&r2=954464&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlSecretRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlSecretRendererBase.java Mon Jun 14 13:40:54 2010
@@ -66,6 +66,18 @@ public class HtmlSecretRendererBase
             }
         }
         
+        //allow subclasses to render custom attributes by separating rendering begin and end
+        renderInputBegin(facesContext, uiComponent);
+        renderInputEnd(facesContext, uiComponent);
+    }
+
+
+    //Subclasses can set the value of an attribute before, or can render a custom attribute after calling this method
+    protected void renderInputBegin(FacesContext facesContext,
+            UIComponent uiComponent) throws IOException
+    {
+        ResponseWriter writer = facesContext.getResponseWriter();
+        
         writer.startElement(HTML.INPUT_ELEM, uiComponent);
         writer.writeAttribute(HTML.TYPE_ATTR, org.apache.myfaces.shared.renderkit.html.HTML.INPUT_TYPE_PASSWORD, null);
 
@@ -98,8 +110,11 @@ public class HtmlSecretRendererBase
             writer.writeAttribute(HTML.VALUE_ATTR, strValue, JSFAttr.VALUE_ATTR);
         }
 
+        Map<String, List<ClientBehavior>> behaviors = null;
         if (uiComponent instanceof ClientBehaviorHolder && JavascriptUtils.isJavascriptAllowed(facesContext.getExternalContext()))
         {
+            behaviors = ((ClientBehaviorHolder) uiComponent).getClientBehaviors();
+            
             HtmlRendererUtils.renderBehaviorizedOnchangeEventHandler(facesContext, writer, uiComponent, behaviors);
             HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, uiComponent, behaviors);
             HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchange(facesContext, writer, uiComponent, behaviors);
@@ -119,11 +134,15 @@ public class HtmlSecretRendererBase
         {
             writer.writeAttribute(HTML.AUTOCOMPLETE_ATTR, AUTOCOMPLETE_VALUE_OFF, HTML.AUTOCOMPLETE_ATTR);
         }
+    }
+
+    protected void renderInputEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
+    {
+        ResponseWriter writer = facesContext.getResponseWriter(); 
 
         writer.endElement(HTML.INPUT_ELEM);
     }
 
-
     protected boolean isDisabled(FacesContext facesContext, UIComponent uiComponent)
     {
         //TODO: overwrite in extended HtmlSecretRenderer and check for enabledOnUserRole

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java?rev=954464&r1=954463&r2=954464&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextRendererBase.java Mon Jun 14 13:40:54 2010
@@ -154,6 +154,15 @@ public class HtmlTextRendererBase
     protected void renderInput(FacesContext facesContext, UIComponent component)
         throws IOException
     {
+        //allow subclasses to render custom attributes by separating rendering begin and end 
+        renderInputBegin(facesContext, component);
+        renderInputEnd(facesContext, component);
+    }
+
+    //Subclasses can set the value of an attribute before, or can render a custom attribute after calling this method
+    protected void renderInputBegin(FacesContext facesContext,
+            UIComponent component) throws IOException
+    {
         ResponseWriter writer = facesContext.getResponseWriter();
 
         String clientId = component.getClientId(facesContext);
@@ -162,7 +171,11 @@ public class HtmlTextRendererBase
         writer.startElement(HTML.INPUT_ELEM, component);
         writer.writeAttribute(HTML.ID_ATTR, clientId, null);
         writer.writeAttribute(HTML.NAME_ATTR, clientId, null);
-        writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_TEXT, null);
+        
+        //allow extending classes to modify html input element's type
+        String inputHtmlType = getInputHtmlType(component);
+        writer.writeAttribute(HTML.TYPE_ATTR, inputHtmlType, null);
+        
         if (value != null)
         {
             writer.writeAttribute(HTML.VALUE_ATTR, value, JSFAttr.VALUE_ATTR);
@@ -192,6 +205,11 @@ public class HtmlTextRendererBase
         {
             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);
     }
@@ -258,4 +276,13 @@ public class HtmlTextRendererBase
                                                        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_TEXT;
+    }
+    
 }

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextareaRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextareaRendererBase.java?rev=954464&r1=954463&r2=954464&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextareaRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTextareaRendererBase.java Mon Jun 14 13:40:54 2010
@@ -68,6 +68,16 @@ public class HtmlTextareaRendererBase
     }
 
     protected void encodeTextArea(FacesContext facesContext, UIComponent uiComponent) throws IOException {
+       //allow subclasses to render custom attributes by separating rendering begin and end
+        renderTextAreaBegin(facesContext, uiComponent);
+        renderTextAreaEnd(facesContext, uiComponent);
+        
+    }
+
+    //Subclasses can set the value of an attribute before, or can render a custom attribute after calling this method
+    protected void renderTextAreaBegin(FacesContext facesContext,
+            UIComponent uiComponent) throws IOException
+    {
         ResponseWriter writer = facesContext.getResponseWriter();
         writer.startElement(HTML.TEXTAREA_ELEM, uiComponent);
 
@@ -103,10 +113,14 @@ public class HtmlTextareaRendererBase
 
         String strValue = org.apache.myfaces.shared.renderkit.RendererUtils.getStringValue(facesContext, uiComponent);
         writer.writeText(strValue, org.apache.myfaces.shared.renderkit.JSFAttr.VALUE_ATTR);
-
-        writer.endElement(HTML.TEXTAREA_ELEM);
     }
 
+    protected void renderTextAreaEnd(FacesContext facesContext,
+            UIComponent uiComponent) throws IOException
+    {
+        facesContext.getResponseWriter().endElement(HTML.TEXTAREA_ELEM);
+    }
+    
     protected boolean isDisabled(FacesContext facesContext, UIComponent uiComponent)
     {
         //TODO: overwrite in extended HtmlTextareaRenderer and check for enabledOnUserRole