[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