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 2014/07/29 20:24:15 UTC

git commit: WW-4165 Excludes attributes marked with @StrutsTagAttribute Such attributes won't be used as dynamic attributes and simply will be omitted

Repository: struts
Updated Branches:
  refs/heads/develop ca50c1aed -> 935cd33f7


WW-4165 Excludes attributes marked with @StrutsTagAttribute
Such attributes won't be used as dynamic attributes and simply will
be omitted


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

Branch: refs/heads/develop
Commit: 935cd33f7e5731e92f114062e7bfdd5a63139a59
Parents: ca50c1a
Author: Lukasz Lenart <lu...@apache.org>
Authored: Tue Jul 29 20:24:01 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Tue Jul 29 20:24:01 2014 +0200

----------------------------------------------------------------------
 .../apache/struts2/components/Component.java    | 21 ++++++++++++++++++++
 .../struts2/views/jsp/ui/AbstractUITag.java     |  4 ++++
 .../apache/struts2/views/jsp/ui/AnchorTest.java |  5 ++++-
 .../struts2/views/jsp/ui/ComponentTest.java     | 13 ++++++++++++
 .../apache/struts2/views/jsp/ui/RadioTest.java  |  1 +
 5 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/main/java/org/apache/struts2/components/Component.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/components/Component.java b/core/src/main/java/org/apache/struts2/components/Component.java
index 99e3aee..2db1cbc 100644
--- a/core/src/main/java/org/apache/struts2/components/Component.java
+++ b/core/src/main/java/org/apache/struts2/components/Component.java
@@ -22,14 +22,17 @@
 package org.apache.struts2.components;
 
 import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.AnnotationUtils;
 import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsException;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
 import org.apache.struts2.util.ComponentUtils;
 import org.apache.struts2.util.FastByteArrayOutputStream;
+import org.apache.struts2.views.annotations.StrutsTagAttribute;
 import org.apache.struts2.views.jsp.TagUtils;
 import org.apache.struts2.views.util.UrlHelper;
 
@@ -38,6 +41,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.lang.reflect.Method;
+import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Stack;
@@ -490,4 +495,20 @@ public class Component {
         return false;
     }
 
+    /**
+     * Checks if provided name is a valid tag's attribute
+     *
+     * @param attrName String name of attribute
+     * @return true if attribute with the same name was already defined
+     */
+    public boolean isValidTagAttribute(String attrName) {
+        Collection<Method> annotatedMethods = AnnotationUtils.getAnnotatedMethods(getClass(), StrutsTagAttribute.class);
+        for (Method annotatedMethod : annotatedMethods) {
+            if (annotatedMethod.getName().contains(StringUtils.capitalize(attrName))) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
index e57932a..d12b3a1 100644
--- a/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
+++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITag.java
@@ -305,6 +305,10 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
     }
 
     public void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
+        if (component.isValidTagAttribute(localName)) {
+            return;
+        }
+
         if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.isExpression(value)) {
             dynamicAttributes.put(localName, String.valueOf(ObjectUtils.defaultIfNull(findValue(value.toString()), value)));
         } else {

http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
index cba1b37..6511944 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java
@@ -24,6 +24,8 @@ package org.apache.struts2.views.jsp.ui;
 import org.apache.struts2.TestAction;
 import org.apache.struts2.views.jsp.AbstractUITagTest;
 
+import javax.servlet.jsp.JspException;
+
 
 /**
  */
@@ -84,9 +86,10 @@ public class AnchorTest extends AbstractUITagTest {
         testAction.setFoo("bar");
     }
 
-    private AnchorTag createTag() {
+    private AnchorTag createTag() throws JspException {
         AnchorTag tag = new AnchorTag();
         tag.setPageContext(pageContext);
+        tag.doStartTag();
 
         tag.setId("mylink");
         return tag;

http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
index 77cb4ec..58a348a 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/ComponentTest.java
@@ -22,6 +22,7 @@
 package org.apache.struts2.views.jsp.ui;
 
 import org.apache.struts2.TestAction;
+import org.apache.struts2.components.Component;
 import org.apache.struts2.views.jsp.AbstractUITagTest;
 
 
@@ -114,4 +115,16 @@ public class ComponentTest extends AbstractUITagTest {
         //        System.out.println(writer);
         verify(ComponentTag.class.getResource("Component-param.txt"));
     }
+
+    public void testTagAttributeExclusion() throws Exception {
+        FormTag tag = new FormTag();
+        tag.setPageContext(pageContext);
+
+        tag.doStartTag();
+        tag.setDynamicAttribute("uri://some.uri", "includeContext", false);
+
+        assertTrue(tag.includeContext);
+    }
+
 }
+

http://git-wip-us.apache.org/repos/asf/struts/blob/935cd33f/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
index d3a9488..a3d01fa 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
@@ -185,6 +185,7 @@ public class RadioTest extends AbstractUITagTest {
 
         RadioTag tag = new RadioTag();
         tag.setPageContext(pageContext);
+        tag.doStartTag();
         tag.setLabel("mylabel");
         tag.setName("myname");
         tag.setValue("");