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>