package org.ocpsoft.rewrite.faces; import javax.faces.event.PhaseId; import javax.servlet.ServletContext; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.faces.config.PhaseOperation; import org.ocpsoft.rewrite.servlet.config.DispatchType; import org.ocpsoft.rewrite.servlet.config.Forward; import org.ocpsoft.rewrite.servlet.config.HttpConfigurationProvider; import org.ocpsoft.rewrite.servlet.config.Path; import org.ocpsoft.rewrite.servlet.config.Redirect; import org.ocpsoft.rewrite.servlet.config.Response; import org.ocpsoft.rewrite.servlet.config.SendStatus; public class DeferredOperationTestConfigurationProvider extends HttpConfigurationProvider { @Override public Configuration getConfiguration(ServletContext context) { return ConfigurationBuilder .begin() /* * Perform an operation after restore view. */ .addRule() .when(Path.matches("/redirect").and(DispatchType.isRequest())) .perform(PhaseOperation.enqueue(Redirect.temporary(context.getContextPath() + "/redirect_result")) .after(PhaseId.RESTORE_VIEW).and(Forward.to("/empty.xhtml") )) .addRule() .when(Path.matches("/redirect_result")) .perform(SendStatus.code(201)) /* * Perform before Render Response */ .addRule() .when(Path.matches("/forward").and(DispatchType.isRequest())) .perform(PhaseOperation.enqueue(Forward.to("/forward_result")).before(PhaseId.RENDER_RESPONSE) .and(Forward.to("/empty.xhtml"))) .addRule() .when(Path.matches("/forward_result").and(DispatchType.isForward())) .perform(Response.addHeader("Forward-Occurred", "True").and(SendStatus.code(202))); } @Override public int priority() { return 0; } }