Author: lukaszlenart
Date: Fri Apr 20 22:19:41 2012
New Revision: 1328526

URL: http://svn.apache.org/viewvc?rev=1328526&view=rev
Log:
WW-3804 adds support of dynamic attributes to <s:radio/> tag and extends 
support for dynamic attributes with expression evaluation
Added:
    
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-7.txt
      - copied, changed from r1328062, 
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt
Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
    
struts/struts2/trunk/core/src/main/resources/template/simple/dynamic-attributes.ftl
    struts/struts2/trunk/core/src/main/resources/template/simple/radiomap.ftl
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java?rev=1328526&r1=1328525&r2=1328526&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java 
(original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java 
Fri Apr 20 22:19:41 2012
@@ -25,6 +25,7 @@ import com.opensymphony.xwork2.ActionCon
 import com.opensymphony.xwork2.ObjectFactory;
 import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.logging.Logger;
 import com.opensymphony.xwork2.util.logging.LoggerFactory;
@@ -148,6 +149,10 @@ public class StrutsUtil {
         return (request == null)? "" : request.getContextPath();
     }
 
+    public String translateVariables(String expression) {
+        return TextParseUtil.translateVariables(expression, stack);
+    }
+
     /**
      * the selectedList objects are matched to the list.listValue
      * <p/>

Modified: 
struts/struts2/trunk/core/src/main/resources/template/simple/dynamic-attributes.ftl
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/dynamic-attributes.ftl?rev=1328526&r1=1328525&r2=1328526&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/resources/template/simple/dynamic-attributes.ftl
 (original)
+++ 
struts/struts2/trunk/core/src/main/resources/template/simple/dynamic-attributes.ftl
 Fri Apr 20 22:19:41 2012
@@ -23,6 +23,8 @@
 <#if (parameters.dynamicAttributes?? && parameters.dynamicAttributes?size > 
0)><#rt/>
 <#assign aKeys = parameters.dynamicAttributes.keySet()><#rt/>
 <#list aKeys as aKey><#rt/>
- ${aKey}="${parameters.dynamicAttributes[aKey]?html}"<#rt/>
+  <#assign keyValue = parameters.dynamicAttributes[aKey]/>
+  <#assign value = struts.translateVariables(keyValue)!keyValue/>
+ ${aKey}="${value?html}"<#rt/>
 </#list><#rt/>
 </#if><#rt/>
\ No newline at end of file

Modified: 
struts/struts2/trunk/core/src/main/resources/template/simple/radiomap.ftl
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/radiomap.ftl?rev=1328526&r1=1328525&r2=1328526&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/template/simple/radiomap.ftl 
(original)
+++ struts/struts2/trunk/core/src/main/resources/template/simple/radiomap.ftl 
Fri Apr 20 22:19:41 2012
@@ -61,6 +61,7 @@
 </#if>
 <#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
 <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
+<#include "/${parameters.templateDir}/simple/dynamic-attributes.ftl" />
 /><#rt/>
 <label for="${parameters.id?html}${itemKeyStr?html}"><#rt/>
     ${itemValue}<#t/>

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java?rev=1328526&r1=1328525&r2=1328526&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java
 Fri Apr 20 22:19:41 2012
@@ -21,24 +21,19 @@
 
 package org.apache.struts2.util;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.TestAction;
-import org.apache.struts2.util.ListEntry;
-import org.apache.struts2.util.StrutsUtil;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockRequestDispatcher;
 
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Test case for StrutsUtil.
@@ -184,6 +179,18 @@ public class StrutsUtilTest extends Stru
         assertEquals(strutsUtil.toString(11l), "11");
     }
 
+    public void testTranslateVariables() throws Exception {
+        stack.push(new Object() {
+            public String getFoo() {
+                return "bar";
+            }
+        });
+        Object obj1 = strutsUtil.translateVariables("try: %{foo}");
+
+        assertNotNull(obj1);
+        assertTrue(obj1 instanceof String);
+        assertEquals(obj1, "try: bar");
+    }
 
     // === Junit Hook
 

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java?rev=1328526&r1=1328525&r2=1328526&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/RadioTest.java
 Fri Apr 20 22:19:41 2012
@@ -21,14 +21,14 @@
 
 package org.apache.struts2.views.jsp.ui;
 
+import org.apache.struts2.TestAction;
+import org.apache.struts2.views.jsp.AbstractUITagTest;
+
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.struts2.TestAction;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-
 
 /**
  */
@@ -175,6 +175,30 @@ public class RadioTest extends AbstractU
         verifyGenericProperties(tag, "xhtml", new String[]{"id","value"});
     }
 
+    public void testDynamicAttributes() throws Exception {
+        TestAction testAction = (TestAction) action;
+        testAction.setFoo("bar");
+        testAction.setList(new String[][]{
+                {"hello", "world"},
+                {"foo", "bar"}
+        });
+
+        RadioTag tag = new RadioTag();
+        tag.setPageContext(pageContext);
+        tag.setLabel("mylabel");
+        tag.setName("myname");
+        tag.setValue("");
+        tag.setList("list");
+        tag.setListKey("top[0]");
+        tag.setListValue("top[1]");
+        tag.setDynamicAttribute(null, "dojo", "checked: %{top[0]}");
+
+        tag.doStartTag();
+        tag.doEndTag();
+
+        verify(RadioTag.class.getResource("Radio-7.txt"));
+    }
+
     private void prepareTagGeneric(RadioTag tag) {
         TestAction testAction = (TestAction) action;
         testAction.setFoo("bar");

Copied: 
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-7.txt
 (from r1328062, 
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt)
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-7.txt?p2=struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-7.txt&p1=struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt&r1=1328062&r2=1328526&rev=1328526&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-1.txt
 (original)
+++ 
struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Radio-7.txt
 Fri Apr 20 22:19:41 2012
@@ -1,7 +1,7 @@
 <tr>
     <td class="tdLabel"><label for="myname" class="label">mylabel:</label></td>
     <td>
-<input type="radio" name="myname" id="mynamehello" value="hello"/><label 
for="mynamehello">world</label>
-<input type="radio" name="myname" id="mynamefoo" value="foo"/><label 
for="mynamefoo">bar</label>
+        <input type="radio" name="myname" id="mynamehello" value="hello" 
dojo="checked:hello"/><label for="mynamehello">world</label>
+        <input type="radio" name="myname" id="mynamefoo" value="foo" 
dojo="checked:foo"/><label for="mynamefoo">bar</label>
     </td>
 </tr>


Reply via email to