[seam-commits] Seam SVN: r15431 - in branches/enterprise/WFK-2_1: jboss-seam/src/main/java/org/jboss/seam/jsf and 1 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Thu Feb 28 03:43:30 EST 2013


Author: manaRH
Date: 2013-02-28 03:43:29 -0500 (Thu, 28 Feb 2013)
New Revision: 15431

Added:
   branches/enterprise/WFK-2_1/seam-integration-tests/src/test/java/org/jboss/seam/test/integration/faces/RedirectTest.java
Modified:
   branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/faces/FacesManager.java
   branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/jsf/SeamViewHandler.java
Log:
JBSEAM-5066, JBSEAM-5073 fixed redirection after regression due changes for JBSEAM-4976

Modified: branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/faces/FacesManager.java
===================================================================
--- branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/faces/FacesManager.java	2013-02-28 08:39:06 UTC (rev 15430)
+++ branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/faces/FacesManager.java	2013-02-28 08:43:29 UTC (rev 15431)
@@ -161,6 +161,7 @@
     * @param parameters request parameters to be encoded (possibly null)
     * @param includeConversationId determines if the conversation id is to be encoded
     */
+   @SuppressWarnings("unchecked")
    public void redirect(String viewId, Map<String, Object> parameters, 
             boolean includeConversationId, boolean includePageParams)
    {
@@ -169,7 +170,7 @@
          throw new RedirectException("cannot redirect to a null viewId");
       }
       FacesContext context = FacesContext.getCurrentInstance();
-      String url = context.getApplication().getViewHandler().getActionURL(context, viewId);
+      String url = context.getApplication().getViewHandler().getRedirectURL(context, viewId, Collections.EMPTY_MAP, false);
       if (parameters!=null) 
       {
          url = encodeParameters(url, parameters);
@@ -204,7 +205,7 @@
          throw new RedirectException("cannot redirect to a null viewId");
       }
       FacesContext context = FacesContext.getCurrentInstance();
-      String url = context.getApplication().getViewHandler().getActionURL(context, viewId);
+      String url = context.getApplication().getViewHandler().getRedirectURL(context, viewId, Collections.EMPTY_MAP, false);
       url = encodeConversationId(url, viewId, conversationId);
       redirect(viewId, context, url);
    }

Modified: branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/jsf/SeamViewHandler.java
===================================================================
--- branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/jsf/SeamViewHandler.java	2013-02-28 08:39:06 UTC (rev 15430)
+++ branches/enterprise/WFK-2_1/jboss-seam/src/main/java/org/jboss/seam/jsf/SeamViewHandler.java	2013-02-28 08:43:29 UTC (rev 15431)
@@ -97,7 +97,7 @@
        Manager manager = Manager.instance();
        String conversationIdParameter = manager.getConversationIdParameter();
 
-       if (!getSource().equals(Source.BOOKMARKABLE) )
+       if (!getSource().equals(Source.BOOKMARKABLE) && !getSource().equals(Source.REDIRECT) )
        {
           if ( !conversation.isNested() || conversation.isLongRunning() )
           {

Added: branches/enterprise/WFK-2_1/seam-integration-tests/src/test/java/org/jboss/seam/test/integration/faces/RedirectTest.java
===================================================================
--- branches/enterprise/WFK-2_1/seam-integration-tests/src/test/java/org/jboss/seam/test/integration/faces/RedirectTest.java	                        (rev 0)
+++ branches/enterprise/WFK-2_1/seam-integration-tests/src/test/java/org/jboss/seam/test/integration/faces/RedirectTest.java	2013-02-28 08:43:29 UTC (rev 15431)
@@ -0,0 +1,166 @@
+package org.jboss.seam.test.integration.faces;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.Serializable;
+import java.net.URL;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Begin;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.exception.Redirect;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.test.integration.Deployments;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.gargoylesoftware.htmlunit.Page;
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+
+
+ at RunWith(Arquillian.class)
+ at RunAsClient
+public class RedirectTest {
+
+	private final WebClient client = new WebClient();
+	   
+	@ArquillianResource
+	URL contextPath;
+	   
+	@Deployment(name="RedirectTest")
+	@OverProtocol("Servlet 3.0") 
+	public static Archive<?> createDeployment()
+	{
+		// This is a client test, use a real (non-mocked) Seam deployment
+		return Deployments.realSeamDeployment()
+				    .addClasses(MyComponent.class, MyException.class)
+				    
+		            .addAsWebResource(new StringAsset(
+		            	 "<html xmlns=\"http://www.w3.org/1999/xhtml\"" +
+		            	   " xmlns:h=\"http://java.sun.com/jsf/html\"" +
+		                   " xmlns:f=\"http://java.sun.com/jsf/core\"" +
+		                   " xmlns:ui=\"http://java.sun.com/jsf/facelets\">" +
+		                 "<h:head></h:head>" +
+		                 "<h:body>" +	
+		                    "<h:form id='form'>" +
+		                        "<h:commandButton id='beginNestedConversation' action='#{redirectTestComponent.beginNestedConversation}'/>" +
+		                    	"<h:commandButton id='throwException' action='#{redirectTestComponent.throwException}'/>" +
+		                        
+		                    	"<h:commandButton id='redirectPropagation' action='#{redirectTestComponent.redirectPropagation}'/>" +
+		                    	"<h:commandButton id='redirectNotPropagation' action='#{redirectTestComponent.redirectNotPropagation}'/>" +
+		                    "</h:form>" +
+	                    "</h:body>" + 
+		                "</html>"), "test.xhtml")
+		                
+		            .addAsWebResource(new StringAsset(
+	            		"<html xmlns=\"http://www.w3.org/1999/xhtml\"" +
+		            	   " xmlns:h=\"http://java.sun.com/jsf/html\"" +
+		                   " xmlns:f=\"http://java.sun.com/jsf/core\"" +
+		                   " xmlns:ui=\"http://java.sun.com/jsf/facelets\">" +
+		                 "<h:head></h:head>" +
+		                 "<h:body>" +	
+		                    "<h:messages globalOnly=\"true\"/>"+
+	                     "</h:body>" + 
+		                 "</html>"), "error.xhtml");
+	}
+	   
+	@Test
+	public void testRedirect() throws Exception
+	{
+		HtmlPage page = client.getPage(contextPath + "test.seam"); 
+		page = page.getElementById("form:redirectNotPropagation").click(); 
+		assertFalse(page.getUrl().toString().contains("cid"));
+		
+		page = client.getPage(contextPath + "test.seam");		   
+		page = page.getElementById("form:redirectPropagation").click(); 
+		assertTrue(page.getUrl().toString().contains("cid"));
+	}
+	   
+	@Test
+	public void testErrorRedirect() throws Exception
+	{
+	   
+		HtmlPage page = client.getPage(contextPath + "test.seam"); 
+		
+		page = page.getElementById("form:throwException").click();
+		assertTrue(page.getBody().getTextContent().contains("Unexpected error, please try again"));
+		assertTrue(page.getUrl().toString().contains("cid"));
+		
+		   
+		page = client.getPage(contextPath + "test.seam"); 
+		page = page.getElementById("form:beginNestedConversation").click();      
+		page = page.getElementById("form:throwException").click();
+		   
+		assertTrue(page.getBody().getTextContent().contains("Unexpected error, please try again"));
+		assertTrue(page.getUrl().toString().contains("cid"));
+		assertTrue(page.getUrl().toString().contains("parentConversationId"));		   		   
+	}
+
+	
+	@Scope(ScopeType.CONVERSATION)
+	@Name("redirectTestComponent")
+	public static class MyComponent implements Serializable
+	{
+		private static final long serialVersionUID = 1L;
+	       
+		public String value;
+		
+		@Create
+		@Begin
+		public void begin()
+		{
+		}
+	       
+		public void beginNestedConversation(){
+			Manager.instance().beginNestedConversation();
+		}
+	       
+		public void throwException(){
+			throw new MyException();
+		}
+	       
+		public void redirectPropagation(){
+			org.jboss.seam.faces.Redirect redirect = org.jboss.seam.faces.Redirect.instance();
+			redirect.setConversationPropagationEnabled(true);
+			redirect.setViewId("/test.xhtml");
+			redirect.execute();
+		}
+		
+		public void redirectNotPropagation(){
+			org.jboss.seam.faces.Redirect redirect = org.jboss.seam.faces.Redirect.instance();
+			redirect.setConversationPropagationEnabled(false);
+			redirect.setViewId("/test.xhtml");
+			redirect.execute();
+		}
+	       
+
+		public String getValue()
+		{
+			return value;
+		}
+	       
+		public void setValue(String value)
+		{
+			this.value = value;
+		}
+	       
+	}
+	
+	@Redirect(viewId="/error.xhtml", message="Unexpected error, please try again", end=true)
+	public static class MyException extends RuntimeException {
+
+		private static final long serialVersionUID = 1L;
+		   
+	}
+}



More information about the seam-commits mailing list