[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...

Gavin King gavin.king at jboss.com
Thu Feb 22 13:08:54 EST 2007


  User: gavin   
  Date: 07/02/22 13:08:54

  Modified:    src/main/org/jboss/seam/core   Manager.java Pages.java
  Log:
  better handling of parameters
  fixed silly breakage of scheme redirect
  
  Revision  Changes    Path
  1.150     +45 -31    jboss-seam/src/main/org/jboss/seam/core/Manager.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Manager.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Manager.java,v
  retrieving revision 1.149
  retrieving revision 1.150
  diff -u -b -r1.149 -r1.150
  --- Manager.java	22 Feb 2007 16:05:39 -0000	1.149
  +++ Manager.java	22 Feb 2007 18:08:54 -0000	1.150
  @@ -42,7 +42,7 @@
    *
    * @author Gavin King
    * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  - * @version $Revision: 1.149 $
  + * @version $Revision: 1.150 $
    */
   @Scope(ScopeType.EVENT)
   @Name("org.jboss.seam.core.manager")
  @@ -806,7 +806,7 @@
      public String encodeConversationId(String url) 
      {
         //DONT BREAK, icefaces uses this
  -      if ( Seam.isSessionInvalid() )
  +      if ( Seam.isSessionInvalid() || containsParameter(url, conversationIdParameter) )
         {
            return url;
         }
  @@ -855,17 +855,6 @@
         }
      }
   
  -   /**
  -    * Redirect to the given view id, encoding the conversation id
  -    * into the request URL.
  -    * 
  -    * @param viewId the JSF view id
  -    */
  -   public void redirect(String viewId)
  -   {
  -      redirect(viewId, null, true);
  -   }
  -   
      public void interpolateAndRedirect(String url)
      {
         Map<String, Object> parameters = new HashMap<String, Object>();
  @@ -894,8 +883,10 @@
         StringBuilder builder = new StringBuilder(url);
         for ( Map.Entry<String, Object> param: parameters.entrySet() )
         {
  -         Object parameterValue = param.getValue();
            String parameterName = param.getKey();
  +         if ( !containsParameter(url, parameterName) )
  +         {
  +            Object parameterValue = param.getValue();
            if (parameterValue instanceof Iterable)
            {
               for ( Object value: (Iterable) parameterValue )
  @@ -920,6 +911,7 @@
               }
            }
         }
  +      }
         if ( url.indexOf('?')<0 ) 
         {
            builder.setCharAt( url.length() ,'?' );
  @@ -927,6 +919,12 @@
         return builder.toString();
      }
   
  +   private boolean containsParameter(String url, String parameterName)
  +   {
  +      return url.indexOf('?' + parameterName + '=')>0 || 
  +            url.indexOf( '&' + parameterName + '=')>0;
  +   }
  +
      private String encode(Object value)
      {
         try
  @@ -940,6 +938,17 @@
      }
      
      /**
  +    * Redirect to the given view id, encoding the conversation id
  +    * into the request URL.
  +    * 
  +    * @param viewId the JSF view id
  +    */
  +   public void redirect(String viewId)
  +   {
  +      redirect(viewId, null, true);
  +   }
  +   
  +   /**
       * Redirect to the given view id, after encoding parameters and conversation id 
       * into the request URL.
       * 
  @@ -960,6 +969,12 @@
         {
            url = encodeParameters(url, parameters);
         }
  +      url = Pages.instance().encodePageParameters( 
  +               FacesContext.getCurrentInstance(), 
  +               url, 
  +               viewId, 
  +               parameters==null ? null : parameters.keySet() 
  +            );
         if (includeConversationId)
         {
            url = encodeConversationId(url);
  @@ -996,8 +1011,7 @@
       */
      public String appendConversationIdFromRedirectFilter(String url)
      {
  -      boolean appendConversationId = !controllingRedirect && 
  -            !url.contains("?" + getConversationIdParameter() +"=");
  +      boolean appendConversationId = !controllingRedirect;
         if (appendConversationId)
         {
            
  
  
  
  1.99      +22 -5     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.98
  retrieving revision 1.99
  diff -u -b -r1.98 -r1.99
  --- Pages.java	22 Feb 2007 16:54:10 -0000	1.98
  +++ Pages.java	22 Feb 2007 18:08:54 -0000	1.99
  @@ -240,11 +240,15 @@
         String viewId = facesContext.getViewRoot().getViewId();
         
         String requestScheme = getRequestScheme(facesContext);
  -      if ( requestScheme!=null && !requestScheme.equals( getScheme(viewId) ) )
  +      if ( requestScheme!=null )
         {
  -         Manager.instance().redirect( viewId, getConvertedParameters(facesContext, viewId), true );              
  +         String scheme = getScheme(viewId);
  +         if ( scheme!=null && !requestScheme.equals(scheme) )
  +         {
  +            Manager.instance().redirect(viewId);              
            return result;
         }
  +      }
         
         for ( Page page: getPageStack(viewId) )
         {         
  @@ -520,7 +524,7 @@
       * against the model and converting to String.
       * 
       * @param viewId the JSF view id
  -    * @param overridden override certain parameter values
  +    * @param overridden excluded parameters
       * @return a map of page parameter name to String value
       */
      public Map<String, Object> getConvertedParameters(FacesContext facesContext, String viewId, Set<String> overridden)
  @@ -653,7 +657,20 @@
       */
      public String encodePageParameters(FacesContext facesContext, String url, String viewId)
      {
  -      Map<String, Object> parameters = getConvertedParameters(facesContext, viewId);
  +      return encodePageParameters(facesContext, url, viewId, Collections.EMPTY_SET);
  +   }
  +   
  +   /**
  +    * Encode page parameters into a URL
  +    * 
  +    * @param url the base URL
  +    * @param viewId the JSF view id of the page
  +    * @param overridden excluded parameters
  +    * @return the URL with parameters appended
  +    */
  +   public String encodePageParameters(FacesContext facesContext, String url, String viewId, Set<String> overridden)
  +   {
  +      Map<String, Object> parameters = getConvertedParameters(facesContext, viewId, overridden);
         return Manager.instance().encodeParameters(url, parameters);
      }
      
  
  
  



More information about the jboss-cvs-commits mailing list