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. + + + + + + + + +