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);
+ }
+ }
}
/**