[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Mon Dec 18 11:50:30 EST 2006
User: gavin
Date: 06/12/18 11:50:30
Modified: src/main/org/jboss/seam/core Pages.java
Log:
multiple actions per page, and conditional page actions
Revision Changes Path
1.69 +49 -30 jboss-seam/src/main/org/jboss/seam/core/Pages.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Pages.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Pages.java,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -b -r1.68 -r1.69
--- Pages.java 18 Dec 2006 15:38:49 -0000 1.68
+++ Pages.java 18 Dec 2006 16:50:30 -0000 1.69
@@ -33,6 +33,7 @@
import org.jboss.seam.core.Expressions.ValueBinding;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
+import org.jboss.seam.pages.Action;
import org.jboss.seam.pages.ActionNavigation;
import org.jboss.seam.pages.ConversationControl;
import org.jboss.seam.pages.Outcome;
@@ -284,24 +285,26 @@
page.getConversationControl().beginOrEndConversation();
- String outcome = page.getOutcome();
+ for ( Action action: page.getActions() )
+ {
+ if ( action.isExecutable() )
+ {
+ String outcome = action.getOutcome();
String fromAction = outcome;
if (outcome==null)
{
- MethodBinding methodBinding = page.getAction();
- if (methodBinding!=null)
- {
- fromAction = methodBinding.getExpressionString();
+ fromAction = action.getMethodBinding().getExpressionString();
result = true;
- outcome = toString( methodBinding.invoke() );
+ outcome = toString( action.getMethodBinding().invoke() );
handleOutcome(facesContext, outcome, fromAction);
}
- }
else
{
handleOutcome(facesContext, outcome, fromAction);
}
+ }
+ }
return result;
@@ -409,7 +412,7 @@
Map<String, Object> parameters = new HashMap<String, Object>();
for ( Page page: getPageStack(viewId) )
{
- for ( Param pageParameter: page.getPageParameters() )
+ for ( Param pageParameter: page.getParameters() )
{
ValueBinding valueBinding = pageParameter.getValueBinding();
Object value;
@@ -443,7 +446,7 @@
Map<String, Object> parameters = new HashMap<String, Object>();
for ( Page page: getPageStack(viewId) )
{
- for ( Param pageParameter: page.getPageParameters() )
+ for ( Param pageParameter: page.getParameters() )
{
if ( !overridden.contains( pageParameter.getName() ) )
{
@@ -484,7 +487,7 @@
Map<String, String[]> requestParameters = Parameters.getRequestParameters();
for ( Page page: getPageStack(viewId) )
{
- for ( Param pageParameter: page.getPageParameters() )
+ for ( Param pageParameter: page.getParameters() )
{
Object value = pageParameter.getValueFromRequest(facesContext, requestParameters);
@@ -512,7 +515,7 @@
String viewId = facesContext.getViewRoot().getViewId();
for ( Page page: getPageStack(viewId) )
{
- for ( Param pageParameter: page.getPageParameters() )
+ for ( Param pageParameter: page.getParameters() )
{
ValueBinding valueBinding = pageParameter.getValueBinding();
if (valueBinding!=null)
@@ -678,7 +681,7 @@
List<Element> children = element.elements("param");
for (Element param: children)
{
- page.getPageParameters().add( parseParam(param) );
+ page.getParameters().add( parseParam(param) );
}
List<Element> moreChildren = element.elements("action-navigation");
@@ -713,18 +716,12 @@
page.setNoConversationViewId( element.attributeValue("no-conversation-view-id") );
page.setConversationRequired( "true".equals( element.attributeValue("conversation-required") ) );
- String action = element.attributeValue("action");
- if (action!=null)
+ Action action = parseAction(element, "action");
+ if (action!=null) page.getActions().add(action);
+ List<Element> childElements = element.elements("action");
+ for (Element childElement: childElements)
{
- if ( action.startsWith("#{") )
- {
- MethodBinding methodBinding = Expressions.instance().createMethodBinding(action);
- page.setAction(methodBinding);
- }
- else
- {
- page.setOutcome(action);
- }
+ page.getActions().add( parseAction(childElement, "execute") );
}
String bundle = element.attributeValue("bundle");
@@ -735,6 +732,28 @@
return page;
}
+ private static Action parseAction(Element element, String actionAtt)
+ {
+ Action action = new Action();
+ String methodExpression = element.attributeValue(actionAtt);
+ if (methodExpression==null) return null;
+ if ( methodExpression.startsWith("#{") )
+ {
+ MethodBinding methodBinding = Expressions.instance().createMethodBinding(methodExpression);
+ action.setMethodBinding(methodBinding);
+ }
+ else
+ {
+ action.setOutcome(methodExpression);
+ }
+ String expression = element.attributeValue("if");
+ if (expression!=null)
+ {
+ action.setValueBinding( Expressions.instance().createValueBinding(expression) );
+ }
+ return action;
+ }
+
/**
* Parse end-conversation and begin-conversation
*/
More information about the jboss-cvs-commits
mailing list