You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/09/07 07:28:03 UTC

struts git commit: WW-4685 Uses dedicated prefixes to access I18N and Struts internals

Repository: struts
Updated Branches:
  refs/heads/master 1bed00d3d -> a5f3bdd14


WW-4685 Uses dedicated prefixes to access I18N and Struts internals


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/a5f3bdd1
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/a5f3bdd1
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/a5f3bdd1

Branch: refs/heads/master
Commit: a5f3bdd1479bbc3957e2dd266a7e6069f1c36380
Parents: 1bed00d
Author: Lukasz Lenart <lu...@apache.org>
Authored: Wed Sep 7 09:27:43 2016 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Wed Sep 7 09:27:43 2016 +0200

----------------------------------------------------------------------
 .../struts2/tiles/I18NAttributeEvaluator.java   | 68 ++++++++++++++++++++
 .../struts2/tiles/StrutsAttributeEvaluator.java | 33 ++--------
 .../tiles/StrutsTilesContainerFactory.java      |  9 ++-
 3 files changed, 80 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/a5f3bdd1/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
----------------------------------------------------------------------
diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
new file mode 100644
index 0000000..37150ae
--- /dev/null
+++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.struts2.tiles;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.TextProvider;
+import com.opensymphony.xwork2.TextProviderFactory;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.ognl.OgnlUtil;
+import ognl.OgnlException;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+import org.apache.tiles.evaluator.AbstractAttributeEvaluator;
+import org.apache.tiles.evaluator.EvaluationException;
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class I18NAttributeEvaluator extends AbstractAttributeEvaluator {
+
+    private static final Logger LOG = LogManager.getLogger(I18NAttributeEvaluator.class);
+
+    @Override
+    public Object evaluate(String expression, Request request) {
+        Object result = expression;
+
+        HttpServletRequest httpRequest = ServletUtil.getServletRequest(request).getRequest();
+        ActionContext ctx = ServletActionContext.getActionContext(httpRequest);
+
+        if (ctx == null) {
+            LOG.error("Cannot obtain HttpServletRequest from [{}]", request.getClass().getName());
+            throw new ConfigurationException("There is no ActionContext for current request!");
+        }
+
+        TextProviderFactory tpf = new TextProviderFactory();
+        ctx.getContainer().inject(tpf);
+        LocaleProvider localeProvider = ctx.getContainer().getInstance(LocaleProvider.class);
+
+        TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), localeProvider);
+
+        if (textProvider != null) {
+            LOG.debug("Trying find text [{}] using TextProvider {}", expression, textProvider);
+            result = textProvider.getText(expression);
+        }
+        return result;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/a5f3bdd1/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
----------------------------------------------------------------------
diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
index 287b2a0..77c6e02 100644
--- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
+++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsAttributeEvaluator.java
@@ -20,9 +20,6 @@
 package org.apache.struts2.tiles;
 
 import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.TextProvider;
-import com.opensymphony.xwork2.TextProviderFactory;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.ognl.OgnlUtil;
 import ognl.OgnlException;
@@ -43,8 +40,6 @@ public class StrutsAttributeEvaluator extends AbstractAttributeEvaluator {
     @Override
     public Object evaluate(String expression, Request request) {
         try {
-            Object result = null;
-
             HttpServletRequest httpRequest = ServletUtil.getServletRequest(request).getRequest();
             ActionContext ctx = ServletActionContext.getActionContext(httpRequest);
 
@@ -53,34 +48,14 @@ public class StrutsAttributeEvaluator extends AbstractAttributeEvaluator {
                 throw new ConfigurationException("There is no ActionContext for current request!");
             }
 
-            TextProviderFactory tpf = new TextProviderFactory();
-            ctx.getContainer().inject(tpf);
-            LocaleProvider localeProvider = ctx.getContainer().getInstance(LocaleProvider.class);
-
-            TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), localeProvider);
-
-            if (textProvider != null) {
-                LOG.debug("Trying find text [{}] using TextProvider {}", expression, textProvider);
-                result = textProvider.getText(expression);
-                if (expression.equals(result)) {
-                    LOG.debug("Could not evaluate expression [{}] as a I18N key", expression);
-                    result = null;
-                }
-            }
+            OgnlUtil ognlUtil = ctx.getContainer().getInstance(OgnlUtil.class);
 
-            if (result == null) {
-                OgnlUtil ognlUtil = ctx.getContainer().getInstance(OgnlUtil.class);
-                LOG.debug("Trying evaluate expression [{}] using OgnlUtil's getValue", expression);
-                result = ognlUtil.getValue(expression, ctx.getContextMap(), ctx.getValueStack().getRoot());
-            }
+            LOG.debug("Trying evaluate expression [{}] using OgnlUtil's getValue", expression);
+            Object result = ognlUtil.getValue(expression, ctx.getContextMap(), ctx.getValueStack().getRoot());
 
             LOG.debug("Final result of evaluating expression [{}] is: {}", expression, result);
 
-            if (result == null) {
-                return expression;
-            } else {
-                return result;
-            }
+            return result;
         } catch (OgnlException e) {
             throw new EvaluationException(e);
         }

http://git-wip-us.apache.org/repos/asf/struts/blob/a5f3bdd1/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java
----------------------------------------------------------------------
diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java
index cecf94e..f1c8bbb 100644
--- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java
+++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java
@@ -77,7 +77,8 @@ import java.util.Set;
 /**
  * Dedicated Struts factory to build Tiles container with support for:
  * - Freemarker
- * - Struts I18N & ValueStack (as default)
+ * - I18N using Struts resource bundles
+ * - S2 ro access Struts' ValueStack
  * - OGNL
  * - EL
  *
@@ -110,6 +111,7 @@ public class StrutsTilesContainerFactory extends BasicTilesContainerFactory {
     public static final String OGNL = "OGNL";
     public static final String EL = "EL";
     public static final String S2 = "S2";
+    public static final String I18N = "I18N";
 
     @Override
     public TilesContainer createDecoratedContainer(TilesContainer originalContainer, ApplicationContext applicationContext) {
@@ -152,6 +154,7 @@ public class StrutsTilesContainerFactory extends BasicTilesContainerFactory {
 
         BasicAttributeEvaluatorFactory attributeEvaluatorFactory = new BasicAttributeEvaluatorFactory(new DirectAttributeEvaluator());
         attributeEvaluatorFactory.registerAttributeEvaluator(S2, createStrutsEvaluator());
+        attributeEvaluatorFactory.registerAttributeEvaluator(I18N, createI18NEvaluator());
         attributeEvaluatorFactory.registerAttributeEvaluator(OGNL, createOGNLEvaluator());
 
         ELAttributeEvaluator elEvaluator = createELEvaluator(applicationContext);
@@ -236,6 +239,10 @@ public class StrutsTilesContainerFactory extends BasicTilesContainerFactory {
         return new StrutsAttributeEvaluator();
     }
 
+    protected I18NAttributeEvaluator createI18NEvaluator() {
+        return new I18NAttributeEvaluator();
+    }
+
     protected OGNLAttributeEvaluator createOGNLEvaluator() {
         try {
             PropertyAccessor objectPropertyAccessor = OgnlRuntime.getPropertyAccessor(Object.class);