diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java
index 123db88f..b129e704 100644
--- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java
+++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/AbstractActionModel.java
@@ -15,6 +15,8 @@
*/
package org.springframework.webflow.engine.model;
+import java.util.LinkedList;
+
/**
* Model support for actions.
*
@@ -22,6 +24,8 @@ package org.springframework.webflow.engine.model;
*/
public abstract class AbstractActionModel extends AbstractModel {
+ private LinkedList attributes;
+
/**
* Actions are not mergeable
* @param model the model to test
@@ -38,4 +42,44 @@ public abstract class AbstractActionModel extends AbstractModel {
// not mergeable
}
+ /**
+ * @return the attributes
+ */
+ public LinkedList getAttributes() {
+ return attributes;
+ }
+
+ /**
+ * @param attributes the attributes to set
+ */
+ public void setOutputs(LinkedList attributes) {
+ this.attributes = attributes;
+ }
+
+ /**
+ * @param attribute the attribute to add
+ */
+ public void addAttribute(AttributeModel attribute) {
+ if (attribute == null) {
+ return;
+ }
+ if (attributes == null) {
+ attributes = new LinkedList();
+ }
+ attributes.add(attribute);
+ }
+
+ /**
+ * @param attributes the attributes to add
+ */
+ public void addAttributes(LinkedList attributes) {
+ if (attributes == null || attributes.isEmpty()) {
+ return;
+ }
+ if (this.attributes == null) {
+ this.attributes = new LinkedList();
+ }
+ this.attributes.addAll(attributes);
+ }
+
}
diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java
index cbf01861..ebb99ce1 100644
--- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java
+++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/ViewStateModel.java
@@ -30,6 +30,7 @@ public class ViewStateModel extends AbstractTransitionableStateModel {
private String redirect;
private String popup;
private String model;
+ private String history;
private LinkedList vars;
private LinkedList onRenderActions;
@@ -62,6 +63,7 @@ public class ViewStateModel extends AbstractTransitionableStateModel {
setRedirect(merge(getRedirect(), state.getRedirect()));
setPopup(merge(getPopup(), state.getPopup()));
setModel(merge(getModel(), state.getModel()));
+ setHistory(merge(getHistory(), state.getHistory()));
setVars(merge(getVars(), state.getVars(), false));
setOnRenderActions(merge(getOnRenderActions(), state.getOnRenderActions(), false));
}
@@ -138,6 +140,24 @@ public class ViewStateModel extends AbstractTransitionableStateModel {
}
}
+ /**
+ * @return the history
+ */
+ public String getHistory() {
+ return history;
+ }
+
+ /**
+ * @param history the history to set
+ */
+ public void setHistory(String history) {
+ if (StringUtils.hasText(history)) {
+ this.history = history;
+ } else {
+ this.history = null;
+ }
+ }
+
/**
* @return the vars
*/
diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java
index 418609b6..2aa4c0de 100644
--- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java
+++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/XmlFlowModelBuilder.java
@@ -531,16 +531,20 @@ public class XmlFlowModelBuilder implements FlowModelBuilder {
EvaluateModel evaluate = new EvaluateModel(element.getAttribute("expression"));
evaluate.setResult(element.getAttribute("result"));
evaluate.setResultType(element.getAttribute("result-type"));
+ evaluate.addAttributes(parseAttributes(element));
return evaluate;
}
private RenderModel parseRender(Element element) {
- return new RenderModel(element.getAttribute("fragments"));
+ RenderModel render = new RenderModel(element.getAttribute("fragments"));
+ render.addAttributes(parseAttributes(element));
+ return render;
}
private SetModel parseSet(Element element) {
SetModel set = new SetModel(element.getAttribute("name"), element.getAttribute("value"));
set.setType(element.getAttribute("type"));
+ set.addAttributes(parseAttributes(element));
return set;
}
@@ -564,6 +568,7 @@ public class XmlFlowModelBuilder implements FlowModelBuilder {
state.setRedirect(element.getAttribute("redirect"));
state.setPopup(element.getAttribute("popup"));
state.setModel(element.getAttribute("model"));
+ state.setHistory(element.getAttribute("history"));
state.setVars(parseVars(element));
state.setOnRenderActions(parseOnRenderActions(element));
state.setAttributes(parseAttributes(element));
diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd
index e309bbca..2f95e384 100644
--- a/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd
+++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/model/builder/xml/spring-webflow-2.0.xsd
@@ -508,6 +508,45 @@ The model object this view is bound to. Typically used as the source of form fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1092,6 +1131,17 @@ Evaluates an expression against the flow request context.
+
+
+
+
+
+
+
+
+
@@ -1132,6 +1182,17 @@ Multiple fragments may be specified using a comma delimiter.
+
+
+
+
+
+
+
+
+
@@ -1153,6 +1214,17 @@ Sets an attribute value in a scope.
+
+
+
+
+
+
+
+
+