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>