You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
In some instances you need to do a redirect to a URL outside your application, for example when a given page is widely linked by external sites and is moved to another application, or on SEO situations that require a 301.
package com.boulevardr.ui; import java.io.IOException; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; @Name("permanentRedirector") public class PermanentRedirector { @In FacesContext facesContext; public void toUrl(String location) { HttpServletResponse res = (HttpServletResponse)facesContext.getExternalContext().getResponse(); res.setContentType("text/html"); res.setHeader("Location", location); res.setStatus(301); facesContext.responseComplete(); } }
on pages.xml:
<page view-id="/page.seam" action="#{permanentRedirector.toUrl('http://site.to.redirect')}" />
It was suggested that this kind of redirect should be done in a Servlet. However, I prefer to keep all flow-related rules on a single location (i. e.: pages.xml), and that was my main motivation behind this solution.