You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2022/03/25 10:53:23 UTC

[myfaces-tobago] branch tobago-5.x updated: fix: TobagoContext: No state

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

lofwyr pushed a commit to branch tobago-5.x
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/tobago-5.x by this push:
     new 5a538d8  fix: TobagoContext: No state
5a538d8 is described below

commit 5a538d8d731538e135d851c90f50567bf9b22976
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 25 11:11:35 2022 +0100

    fix: TobagoContext: No state
    
    issue: TOBAGO-2122
---
 .../myfaces/tobago/context/TobagoContext.java      | 80 +++++++++++-----------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/TobagoContext.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/TobagoContext.java
index f2a4ae5..ab49cb7 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/TobagoContext.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/TobagoContext.java
@@ -44,13 +44,10 @@ public class TobagoContext implements Serializable {
 
   public static final String BEAN_NAME = "tobagoContext";
 
-  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+  public static final String FOCUS_ID_KEY = "tobago.focusId";
+  public static final String ENCTYPE_KEY = "tobago.enctype";
 
-  private TobagoConfig tobagoConfig;
-  private Theme theme;
-  private UserAgent userAgent;
-  private String focusId;
-  private String enctype;
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   /**
    * @deprecated since 5.0.0. Please use {@link org.apache.myfaces.tobago.util.ResourceUtils#getString} in Java or
@@ -78,19 +75,17 @@ public class TobagoContext implements Serializable {
   }
 
   public TobagoConfig getTobagoConfig() {
-    if (tobagoConfig == null) {
-      tobagoConfig = TobagoConfig.getInstance(FacesContext.getCurrentInstance());
-    }
-    return tobagoConfig;
+    return TobagoConfig.getInstance(FacesContext.getCurrentInstance());
   }
 
   public Theme getTheme() {
-
+    // load it from faces context
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    Theme theme = (Theme) facesContext.getAttributes().get(Theme.THEME_KEY);
     if (theme != null) {
       return theme;
     }
 
-    final FacesContext facesContext = FacesContext.getCurrentInstance();
     final ExternalContext externalContext = facesContext.getExternalContext();
     final Object request = externalContext.getRequest();
     final Object session = externalContext.getSession(false);
@@ -104,31 +99,32 @@ public class TobagoContext implements Serializable {
       }
     }
 
-    if (theme != null) {
-      return theme;
-    }
-
     // or load it from cookie
-    if (request instanceof HttpServletRequest && getTobagoConfig().isThemeCookie()) {
-      final String themeName = CookieUtils.getThemeNameFromCookie((HttpServletRequest) request);
-      theme = getTobagoConfig().getTheme(themeName);
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("from cookie theme='{}'", theme.getName());
+    if (theme == null) {
+      if (request instanceof HttpServletRequest && getTobagoConfig().isThemeCookie()) {
+        final String themeName = CookieUtils.getThemeNameFromCookie((HttpServletRequest) request);
+        theme = getTobagoConfig().getTheme(themeName);
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("from cookie theme='{}'", theme.getName());
+        }
       }
     }
 
-    if (theme != null) {
-      return theme;
+    // or use default
+    if (theme == null) {
+      theme = getTobagoConfig().getDefaultTheme();
     }
 
-    // or use default
-    return getTobagoConfig().getDefaultTheme();
+    facesContext.getAttributes().put(Theme.THEME_KEY, theme);
+
+    return theme;
   }
 
   public void setTheme(final Theme theme) {
-    this.theme = theme;
-
+    // save in faces context
     final FacesContext facesContext = FacesContext.getCurrentInstance();
+    facesContext.getAttributes().put(Theme.THEME_KEY, theme);
+
     final ExternalContext externalContext = facesContext.getExternalContext();
     final Object request = externalContext.getRequest();
     final Object response = externalContext.getResponse();
@@ -147,38 +143,42 @@ public class TobagoContext implements Serializable {
 
   public UserAgent getUserAgent() {
 
-    if (userAgent == null) {
-      final FacesContext facesContext = FacesContext.getCurrentInstance();
-      final ExternalContext externalContext = facesContext.getExternalContext();
+    UserAgent userAgent;
 
-      final String requestUserAgent = externalContext.getRequestHeaderMap().get("User-Agent");
-      userAgent = UserAgent.getInstance(requestUserAgent);
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("userAgent='" + userAgent + "' from header " + "'User-Agent: " + requestUserAgent + "'");
-      }
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    final ExternalContext externalContext = facesContext.getExternalContext();
+
+    final String requestUserAgent = externalContext.getRequestHeaderMap().get("User-Agent");
+    userAgent = UserAgent.getInstance(requestUserAgent);
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("userAgent='" + userAgent + "' from header " + "'User-Agent: " + requestUserAgent + "'");
     }
 
     return userAgent;
   }
 
   public void setUserAgent(final UserAgent userAgent) {
-    this.userAgent = userAgent;
+    LOG.warn("Setting user agent ignored! param={}", userAgent);
   }
 
   public String getFocusId() {
-    return focusId;
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    return (String) facesContext.getAttributes().get(FOCUS_ID_KEY);
   }
 
   public void setFocusId(final String focusId) {
-    this.focusId = focusId;
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    facesContext.getAttributes().put(FOCUS_ID_KEY, focusId);
   }
 
   public String getEnctype() {
-    return enctype;
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    return (String) facesContext.getAttributes().get(ENCTYPE_KEY);
   }
 
   public void setEnctype(final String enctype) {
-    this.enctype = enctype;
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+    facesContext.getAttributes().put(ENCTYPE_KEY, enctype);
   }
 
   public static TobagoContext getInstance(final FacesContext facesContext) {