You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/05/07 00:14:42 UTC

svn commit: r941953 - in /myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared: config/MyfacesConfig.java renderkit/html/HtmlButtonRendererBase.java renderkit/html/HtmlLinkRendererBase.java

Author: lu4242
Date: Thu May  6 22:14:42 2010
New Revision: 941953

URL: http://svn.apache.org/viewvc?rev=941953&view=rev
Log:
merge revisions 940133-941950 including MYFACES-2463

Modified:
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java?rev=941953&r1=941952&r2=941953&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java Thu May  6 22:14:42 2010
@@ -156,14 +156,28 @@ public class MyfacesConfig
     private static final boolean INIT_PARAM_STRICT_XHTML_LINKS_DEFAULT = true;
     
     /**
-     * 
+     * This param renders the clear javascript on button necessary only for
+     * compatibility with hidden fields feature of myfaces. This is done 
+     * because jsf ri does not render javascript on onclick method for button,
+     * so myfaces should do this.
      */
-    @JSFWebConfigParam(defaultValue="false", expectedValues="true,false",since="1.1")
+    @JSFWebConfigParam(defaultValue="false", expectedValues="true,false",since="1.2.3")
     private static final String INIT_PARAM_RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON = "org.apache.myfaces.RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON";
     private static final boolean INIT_PARAM_RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON_DEFAULT= false;
 
     /**
-     * 
+     * This param renders hidden fields at the end of h:form for link params when h:commandLink + f:param is used, instead
+     * use javascript to create them. Set this param to true also enables org.apache.myfaces.RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON 
+     * automatically to ensure consistency. This feature is required to support Windows Mobile 6, because in this environment,
+     * document.createElement() and form.appendChild() javascript methods are not supported.
+     */
+    @JSFWebConfigParam(defaultValue="false", expectedValues="true,false",since="1.2.9")
+    private static final String INIT_PARAM_RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS = "org.apache.myfaces.RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS";
+    private static final boolean INIT_PARAM_RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS_DEFAULT= false;
+    
+    /**
+     * Add a code that save the form before submit using a
+     * link (call to window.external.AutoCompleteSaveForm(form) ). It's a bug on IE.
      */
     @JSFWebConfigParam(defaultValue="false", expectedValues="true,false",since="1.1")
     private static final String INIT_PARAM_SAVE_FORM_SUBMIT_LINK_IE = "org.apache.myfaces.SAVE_FORM_SUBMIT_LINK_IE";
@@ -215,6 +229,7 @@ public class MyfacesConfig
     private boolean _renderViewStateId;
     private boolean _strictXhtmlLinks;
     private boolean _renderClearJavascriptOnButton;
+    private boolean renderHiddenFieldsForLinkParams;
     private boolean _saveFormSubmitLinkIE;
     private String _delegateFacesServlet;
     private boolean _refreshTransientBuildOnPSS;
@@ -299,6 +314,9 @@ public class MyfacesConfig
         myfacesConfig.setRenderClearJavascriptOnButton(getBooleanInitParameter(extCtx, INIT_PARAM_RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON,
                                                             INIT_PARAM_RENDER_CLEAR_JAVASCRIPT_FOR_BUTTON_DEFAULT));
 
+        myfacesConfig.setRenderHiddenFieldsForLinkParams(getBooleanInitParameter(extCtx, INIT_PARAM_RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS,
+                INIT_PARAM_RENDER_HIDDEN_FIELDS_FOR_LINK_PARAMS_DEFAULT));
+
         myfacesConfig.setSaveFormSubmitLinkIE(getBooleanInitParameter(extCtx, INIT_PARAM_SAVE_FORM_SUBMIT_LINK_IE,
                                                             INIT_PARAM_SAVE_FORM_SUBMIT_LINK_IE_DEFAULT));
         
@@ -653,6 +671,17 @@ public class MyfacesConfig
         return _renderClearJavascriptOnButton;
     }
 
+    public boolean isRenderHiddenFieldsForLinkParams()
+    {
+        return renderHiddenFieldsForLinkParams;
+    }
+
+    public void setRenderHiddenFieldsForLinkParams(
+            boolean renderHiddenFieldsForLinkParams)
+    {
+        this.renderHiddenFieldsForLinkParams = renderHiddenFieldsForLinkParams;
+    }
+
     public void setSaveFormSubmitLinkIE(boolean saveFormSubmitLinkIE)
     {
         _saveFormSubmitLinkIE = saveFormSubmitLinkIE;

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java?rev=941953&r1=941952&r2=941953&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java Thu May  6 22:14:42 2010
@@ -298,7 +298,8 @@ public class HtmlButtonRendererBase
         {
             String formName = nestedFormInfo.getFormName();
     
-            if (JavascriptUtils.isRenderClearJavascriptOnButton(facesContext.getExternalContext()))
+        if (JavascriptUtils.isRenderClearJavascriptOnButton(facesContext.getExternalContext()) ||
+            MyfacesConfig.getCurrentInstance(facesContext.getExternalContext()).isRenderHiddenFieldsForLinkParams() )
             {
                 //call the script to clear the form (clearFormHiddenParams_<formName>) method
                 HtmlRendererUtils.appendClearHiddenCommandFormParamsFunctionCall(onClick, formName);

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java?rev=941953&r1=941952&r2=941953&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java Thu May  6 22:14:42 2010
@@ -333,7 +333,7 @@ public abstract class HtmlLinkRendererBa
         else {
             HtmlRendererUtils.renderFormSubmitScript(facesContext);
 
-            StringBuffer params = addChildParameters(component, nestingForm);
+            StringBuffer params = addChildParameters(facesContext, component, nestingForm);
 
             String target = getTarget(component);
 
@@ -351,8 +351,11 @@ public abstract class HtmlLinkRendererBa
 
             //Not necessary since we are using oamSetHiddenInput to create input hidden fields
             //render hidden field - todo: in here for backwards compatibility
-            //String hiddenFieldName = HtmlRendererUtils.getHiddenCommandLinkFieldName(formInfo);
-            //addHiddenCommandParameter(facesContext, nestingForm, hiddenFieldName);
+            if (MyfacesConfig.getCurrentInstance(facesContext.getExternalContext()).isRenderHiddenFieldsForLinkParams())
+            {
+                String hiddenFieldName = HtmlRendererUtils.getHiddenCommandLinkFieldName(formInfo);
+                addHiddenCommandParameter(facesContext, nestingForm, hiddenFieldName);
+            }
 
         }
         
@@ -491,8 +494,7 @@ public abstract class HtmlLinkRendererBa
         return target;
     }
 
-    private StringBuffer addChildParameters(UIComponent component, UIComponent nestingForm) 
-    {
+    private StringBuffer addChildParameters(FacesContext context, UIComponent component, UIComponent nestingForm) {
         //add child parameters
         StringBuffer params = new StringBuffer();
         params.append("[");
@@ -504,7 +506,10 @@ public abstract class HtmlLinkRendererBa
             String name = param.getName();
 
             //Not necessary, since we are using oamSetHiddenInput to create hidden fields
-            //addHiddenCommandParameter(FacesContext.getCurrentInstance(), nestingForm, name);
+            if (MyfacesConfig.getCurrentInstance(context.getExternalContext()).isRenderHiddenFieldsForLinkParams())
+            {
+                addHiddenCommandParameter(context, nestingForm, name);
+            }
 
             Object value = param.getValue();