You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by st...@apache.org on 2012/05/14 19:40:10 UTC

svn commit: r1338308 - in /myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api: pom.xml src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java

Author: struberg
Date: Mon May 14 17:40:10 2012
New Revision: 1338308

URL: http://svn.apache.org/viewvc?rev=1338308&view=rev
Log:
EXTCDI-287 store noScript decision in a Cookie

This makes the handling for a user much easier if he has
* an EAR with multiple WebApps (he previously had to 
  disable it for each webapp)
* a user got session timeouts and visits again later 

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/pom.xml
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/pom.xml?rev=1338308&r1=1338307&r2=1338308&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/pom.xml (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/pom.xml Mon May 14 17:40:10 2012
@@ -39,10 +39,16 @@
         </dependency>
 
         <dependency>
-           <groupId>org.apache.geronimo.specs</groupId>
-           <artifactId>geronimo-el_1.0_spec</artifactId>
-           <scope>provided</scope>
-       </dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-el_1.0_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-servlet_2.5_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java?rev=1338308&r1=1338307&r2=1338308&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/ClientConfig.java Mon May 14 17:40:10 2012
@@ -27,6 +27,9 @@ import javax.inject.Inject;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 /**
@@ -44,7 +47,10 @@ public class ClientConfig implements Ser
     private static final long serialVersionUID = 581351549574404793L;
     public static final String BODY_ATTRIBUTES_PLACEHOLDER = "$$bodyAttributes$$";
 
-    private boolean javaScriptEnabled = true;
+    /** We will set a cookie with this very name if a noscript link got clicked by the user */
+    public static final String COOKIE_NAME_NOSCRIPT_ENABLED = "mfNoScriptEnabled";
+
+    private volatile Boolean javaScriptEnabled = null;
 
     protected String windowHandlerHtml;
 
@@ -62,7 +68,42 @@ public class ClientConfig implements Ser
      */
     public boolean isJavaScriptEnabled()
     {
-        return this.javaScriptEnabled;
+        if (javaScriptEnabled == null)
+        {
+            synchronized(this)
+            {
+                // double lock checking idiom on volatile variable works since java5
+                if (javaScriptEnabled == null)
+                {
+                    // no info means that it is default -> true
+                    javaScriptEnabled = Boolean.TRUE;
+
+                    FacesContext facesContext = FacesContext.getCurrentInstance();
+                    if (facesContext != null)
+                    {
+                        Object r = facesContext.getExternalContext().getRequest();
+                        if (r instanceof HttpServletRequest)
+                        {
+                            HttpServletRequest request = (HttpServletRequest) r;
+                            Cookie[] cookies = request.getCookies();
+
+                            if (cookies != null && cookies.length > 0)
+                            {
+                                for(Cookie cookie : cookies)
+                                {
+                                    if (cookie.getName().equalsIgnoreCase(COOKIE_NAME_NOSCRIPT_ENABLED))
+                                    {
+                                        javaScriptEnabled = Boolean.parseBoolean(cookie.getValue());
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        return javaScriptEnabled;
     }
 
     /**
@@ -74,6 +115,20 @@ public class ClientConfig implements Ser
     public void setJavaScriptEnabled(boolean javaScriptEnabled)
     {
         this.javaScriptEnabled = javaScriptEnabled;
+
+        // and now also store this information inside a cookie!
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext != null)
+        {
+            Object r = facesContext.getExternalContext().getResponse();
+            if (r instanceof HttpServletResponse)
+            {
+                Cookie cookie = new Cookie(COOKIE_NAME_NOSCRIPT_ENABLED, "" + javaScriptEnabled);
+                cookie.setPath("/"); // for all the server
+                HttpServletResponse response = (HttpServletResponse) r;
+                response.addCookie(cookie);
+            }
+        }
     }
 
     /**