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 <lukaszlen...@apache.org> Authored: Tue Sep 23 23:02:31 2014 +0200 Committer: Lukasz Lenart <lukaszlen...@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);