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/09/23 23:03:12 UTC

git commit: Adds BeanInfo to allow define class attribute in JSPs

Repository: struts
Updated Branches:
  refs/heads/develop 3b9d58614 -> 587e3a41b


Adds BeanInfo to allow define class attribute in JSPs


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

Branch: refs/heads/develop
Commit: 587e3a41b1d306eb246aa39d71dce469f4e50e9d
Parents: 3b9d586
Author: Lukasz Lenart <lu...@apache.org>
Authored: Tue Sep 23 23:02:31 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Tue Sep 23 23:02:31 2014 +0200

----------------------------------------------------------------------
 .../webapp/WEB-INF/jsp/example/HelloWorld.jsp   |  2 +-
 .../struts2/views/jsp/ui/AbstractUITag.java     |  7 +-
 .../views/jsp/ui/AbstractUITagBeanInfo.java     | 70 ++++++++++++++++++++
 .../apache/struts2/views/jsp/ui/AnchorTest.java | 10 +++
 .../struts2/views/jsp/ui/ComponentTest.java     |  2 +-
 .../struts2/views/jsp/ui/Component-param.txt    |  2 +-
 .../test/resources/template/test/Component.ftl  |  2 +-
 .../dojo/views/jsp/ui/TabbedPanelTag.java       |  2 +-
 8 files changed, 89 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/apps/blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
----------------------------------------------------------------------
diff --git a/apps/blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp b/apps/blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
index f10fc02..17b0963 100644
--- a/apps/blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
+++ b/apps/blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
@@ -14,7 +14,7 @@
         <s:url id="url" action="HelloWorld">
             <s:param name="request_locale">en</s:param>
         </s:url>
-        <s:a href="%{url}">English</s:a>
+        <s:a class="test" href="%{url}">English</s:a>
     </li>
     <li>
         <s:url id="url" action="HelloWorld">

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/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..65b80cf 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
@@ -44,7 +44,7 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
     protected String disabled;
     protected String label;
     protected String labelSeparator;
-    protected String labelPosition;
+    protected String labelposition;
     protected String requiredPosition;
     protected String errorPosition;
     protected String name;
@@ -96,7 +96,7 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
         uiBean.setDisabled(disabled);
         uiBean.setLabel(label);
         uiBean.setLabelSeparator(labelSeparator);
-        uiBean.setLabelposition(labelPosition);
+        uiBean.setLabelposition(labelposition);
         uiBean.setRequiredPosition(requiredPosition);
         uiBean.setErrorPosition(errorPosition);
         uiBean.setName(name);
@@ -148,6 +148,7 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
     public void setCssStyle(String cssStyle) {
         this.cssStyle = cssStyle;
     }
+
     public void setStyle(String cssStyle) {
         this.cssStyle = cssStyle;
     }
@@ -173,7 +174,7 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
     }
 
     public void setLabelposition(String labelPosition) {
-        this.labelPosition = labelPosition;
+        this.labelposition = labelPosition;
     }
 
     public void setRequiredPosition(String requiredPosition) {

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITagBeanInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITagBeanInfo.java b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITagBeanInfo.java
new file mode 100644
index 0000000..87e4105
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/views/jsp/ui/AbstractUITagBeanInfo.java
@@ -0,0 +1,70 @@
+/*
+ * $Id$
+ *
+ * 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.views.jsp.ui;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+import java.beans.PropertyDescriptor;
+import java.beans.SimpleBeanInfo;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Describes properties supported by the AbstractUITag - base class for all UI tags
+ * This bases on HtmlTagSupportBeanInfo class from StripesFramework - thanks!
+ */
+public class AbstractUITagBeanInfo extends SimpleBeanInfo {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractUITagBeanInfo.class);
+
+    @Override
+    public PropertyDescriptor[] getPropertyDescriptors() {
+        try {
+            List<PropertyDescriptor> descriptors = new ArrayList<PropertyDescriptor>();
+
+            // Add the tricky one first
+            Method setter = AbstractUITag.class.getMethod("setCssClass", String.class);
+            descriptors.add(new PropertyDescriptor("class", null, setter));
+            descriptors.add(new PropertyDescriptor("cssClass", null, setter));
+
+            for (Field field : AbstractUITag.class.getDeclaredFields()) {
+                String fieldName = field.getName();
+                if (!"dynamicAttributes".equals(fieldName)) {
+                    String setterName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
+                    setter = AbstractUITag.class.getMethod(setterName, String.class);
+                    descriptors.add(new PropertyDescriptor(fieldName, null, setter));
+                }
+            }
+
+            PropertyDescriptor[] array = new PropertyDescriptor[descriptors.size()];
+            return descriptors.toArray(array);
+        } catch (Exception e) {
+            // This is crazy talk, we're only doing things that should always succeed
+            LOG.fatal("Could not construct bean info for AbstractUITag. This is very bad.", e);
+            return null;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/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 bd007e9..2323164 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
@@ -25,12 +25,22 @@ import org.apache.struts2.TestAction;
 import org.apache.struts2.views.jsp.AbstractUITagTest;
 
 import javax.servlet.jsp.JspException;
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 
 
 /**
  */
 public class AnchorTest extends AbstractUITagTest {
 
+    public void testBeanInfo() throws Exception {
+        BeanInfo beanInfo = Introspector.getBeanInfo(AbstractUITag.class);
+        for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
+            System.out.println(pd.getName() + ": write = " + pd.getWriteMethod() + ", read = " + pd.getReadMethod());
+        }
+    }
+
     public void testSimple() throws Exception {
         createAction();
 

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/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 124829b..1d68644 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
@@ -109,7 +109,7 @@ public class ComponentTest extends AbstractUITagTest {
         tag.getComponent().addParameter("argle", "bargle");
         tag.getComponent().addParameter("glip", "glop");
         tag.getComponent().addParameter("array", new String[]{"a", "b", "c"});
-        tag.getComponent().addParameter("obj", tag);
+        tag.getComponent().addParameter("objClass", tag.getClass().getName());
         tag.doEndTag();
 
         //        System.out.println(writer);

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
index 9d257f6..9f1580b 100644
--- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Component-param.txt
@@ -1,7 +1,7 @@
 param hello     = world
 param argle     = bargle
 param glip      = glop
-param obj.Class = class org.apache.struts2.views.jsp.ui.ComponentTag
+param obj.Class = org.apache.struts2.views.jsp.ui.ComponentTag
 
 param array[0] = a
 param array[1] = b

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/core/src/test/resources/template/test/Component.ftl
----------------------------------------------------------------------
diff --git a/core/src/test/resources/template/test/Component.ftl b/core/src/test/resources/template/test/Component.ftl
index 3d70030..c4d1c27 100644
--- a/core/src/test/resources/template/test/Component.ftl
+++ b/core/src/test/resources/template/test/Component.ftl
@@ -23,7 +23,7 @@
 param hello     = ${parameters.hello}
 param argle     = ${parameters.argle}
 param glip      = ${parameters.glip}
-param obj.Class = ${parameters.obj.class}
+param obj.Class = ${parameters.objClass}
 
 <#list parameters.array as element>
 param array[${element_index}] = ${element}

http://git-wip-us.apache.org/repos/asf/struts/blob/587e3a41/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TabbedPanelTag.java
----------------------------------------------------------------------
diff --git a/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TabbedPanelTag.java b/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TabbedPanelTag.java
index d70db29..098b40d 100644
--- a/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TabbedPanelTag.java
+++ b/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TabbedPanelTag.java
@@ -56,7 +56,7 @@ public class TabbedPanelTag extends AbstractClosingTag {
         tabbedPanel.setSelectedTab(selectedTab);
         tabbedPanel.setCloseButton(closeButton);
         tabbedPanel.setDoLayout(doLayout);
-        tabbedPanel.setLabelposition(labelPosition);
+        tabbedPanel.setLabelposition(labelposition);
         tabbedPanel.setTemplateCssPath(templateCssPath);
         tabbedPanel.setBeforeSelectTabNotifyTopics(beforeSelectTabNotifyTopics);
         tabbedPanel.setAfterSelectTabNotifyTopics(afterSelectTabNotifyTopics);