mirror of
https://github.com/apache/struts.git
synced 2026-08-31 11:24:28 +00:00
Resolved WW-3463 - added support for dynamic attributes
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@963604 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
package org.apache.struts2.views.java.simple;
|
||||
|
||||
import org.apache.struts2.views.java.Attributes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Adds dynamic attributes
|
||||
*/
|
||||
public class DynamicAttributesHandler extends AbstractTagHandler {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.apache.struts2.views.java.simple.AbstractTagHandler#start(java.lang.String, org.apache.struts2.views.java.Attributes)
|
||||
*/
|
||||
@Override
|
||||
public void start(String name, Attributes a) throws IOException {
|
||||
a.putAll((Map<String, String>) context.getParameters().get("dynamicAttributes"));
|
||||
super.start(name, a);
|
||||
}
|
||||
|
||||
}
|
||||
+13
-13
@@ -34,28 +34,28 @@ public class SimpleTheme extends DefaultTheme {
|
||||
public SimpleTheme() {
|
||||
setHandlerFactories(new HashMap<String, List<TagHandlerFactory>>() {
|
||||
{
|
||||
put("text", new FactoryList(TextFieldHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("textfield", new FactoryList(TextFieldHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("select", new FactoryList(SelectHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("form", new FactoryList(FormHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("text", new FactoryList(TextFieldHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("textfield", new FactoryList(TextFieldHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("select", new FactoryList(SelectHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("form", new FactoryList(FormHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("form-close", new FactoryList(FormHandler.CloseHandler.class));
|
||||
put("a", new FactoryList(AnchorHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("a", new FactoryList(AnchorHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("a-close", new FactoryList(AnchorHandler.CloseHandler.class));
|
||||
put("checkbox", new FactoryList(CheckboxHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("file", new FactoryList(FileHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("password", new FactoryList(PasswordHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("label", new FactoryList(LabelHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("reset", new FactoryList(ResetHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("submit", new FactoryList(SubmitHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("checkbox", new FactoryList(CheckboxHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("file", new FactoryList(FileHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("password", new FactoryList(PasswordHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("label", new FactoryList(LabelHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("reset", new FactoryList(ResetHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("submit", new FactoryList(SubmitHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("submit-close", new FactoryList(SubmitHandler.CloseHandler.class));
|
||||
put("textarea", new FactoryList(TextAreaHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("textarea", new FactoryList(TextAreaHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("actionerror", new FactoryList(ActionErrorHandler.class));
|
||||
put("token", new FactoryList(TokenHandler.class));
|
||||
put("actionmessage", new FactoryList(ActionMessageHandler.class));
|
||||
put("head", new FactoryList(HeadHandler.class));
|
||||
put("hidden", new FactoryList(HiddenHandler.class));
|
||||
put("fielderror", new FactoryList(FieldErrorHandler.class));
|
||||
put("div", new FactoryList(DivHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
|
||||
put("div", new FactoryList(DivHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class, DynamicAttributesHandler.class));
|
||||
put("div-close", new FactoryList(DivHandler.CloseHandler.class));
|
||||
put("empty", new FactoryList(EmptyHandler.class));
|
||||
}
|
||||
|
||||
+13
-1
@@ -27,7 +27,19 @@ public abstract class AbstractCommonAttributesTest extends AbstractTest {
|
||||
theme.renderTag(getTagName(), context);
|
||||
String output = writer.getBuffer().toString();
|
||||
|
||||
assertCommongAttrs(output);
|
||||
assertCommonAttrs(output);
|
||||
}
|
||||
|
||||
public void testRenderTextFieldDynamicAttrs() throws Exception {
|
||||
UIBean tag = getUIBean();
|
||||
|
||||
applyDynamicAttrs(tag);
|
||||
|
||||
tag.evaluateParams();
|
||||
map.putAll(tag.getParameters());
|
||||
theme.renderTag(getTagName(), context);
|
||||
String output = writer.getBuffer().toString();
|
||||
|
||||
assertDynamicAttrs(output);
|
||||
}
|
||||
}
|
||||
|
||||
+16
-1
@@ -23,6 +23,7 @@ import java.util.Stack;
|
||||
public abstract class AbstractTest extends TestCase {
|
||||
private Map<String, String> scriptingAttrs = new HashMap<String, String>();
|
||||
private Map<String, String> commonAttrs = new HashMap<String, String>();
|
||||
private Map<String, Object> dynamicAttrs = new HashMap<String, Object>();
|
||||
|
||||
protected SimpleTheme theme;
|
||||
|
||||
@@ -60,6 +61,9 @@ public abstract class AbstractTest extends TestCase {
|
||||
|
||||
commonAttrs.put("accesskey", "accesskey_");
|
||||
|
||||
dynamicAttrs.put("data-remote", "data-remote_");
|
||||
dynamicAttrs.put("data-label", "data-label_");
|
||||
|
||||
theme = new SimpleTheme();
|
||||
writer = new StringWriter();
|
||||
map = new HashMap();
|
||||
@@ -132,6 +136,10 @@ public abstract class AbstractTest extends TestCase {
|
||||
bean.setAccesskey("accesskey_");
|
||||
}
|
||||
|
||||
protected void applyDynamicAttrs(UIBean bean) {
|
||||
bean.setDynamicAttributes(dynamicAttrs);
|
||||
}
|
||||
|
||||
protected void assertScriptingAttrs(String str) {
|
||||
for (Map.Entry<String, String> entry : scriptingAttrs.entrySet()) {
|
||||
String substr = entry.getKey() + "=\"" + entry.getValue() + "\"";
|
||||
@@ -139,13 +147,20 @@ public abstract class AbstractTest extends TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
protected void assertCommongAttrs(String str) {
|
||||
protected void assertCommonAttrs(String str) {
|
||||
for (Map.Entry<String, String> entry : commonAttrs.entrySet()) {
|
||||
String substr = entry.getKey() + "=\"" + entry.getValue() + "\"";
|
||||
assertTrue("String [" + substr + "] was not found in [" + str + "]", str.indexOf(substr) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
protected void assertDynamicAttrs(String str) {
|
||||
for (Map.Entry<String, Object> entry : dynamicAttrs.entrySet()) {
|
||||
String substr = entry.getKey() + "=\"" + entry.getValue() + "\"";
|
||||
assertTrue("String [" + substr + "] was not found in [" + str + "]", str.indexOf(substr) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
protected Object doFindValue(String expr, Class toType) {
|
||||
Object val = stack.findValue(expr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user