package org.jboss.seam.navigation; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.application.FacesMessage.Severity; import javax.faces.context.FacesContext; import org.jboss.seam.core.Expressions.ValueExpression; /** * Metadata for a <redirect/> in pages.xml * * @author Gavin King * */ public final class RedirectNavigationHandler extends NavigationHandler { private final ValueExpression<String> viewId; private final ValueExpression<String> url; private final List<Param> params; private final String message; private final Severity severity; private final String control; private final boolean includePageParams; public RedirectNavigationHandler(ValueExpression<String> viewId, ValueExpression<String> url, List<Param> params, String message, Severity severity, String control, boolean includePageParams) { this.viewId = viewId; this.url = url; this.params = params; this.message = message; this.severity = severity; this.control = control; this.includePageParams = includePageParams; } @Override public boolean navigate(FacesContext context) { addFacesMessage(message, severity, control); Map<String, Object> parameters = new HashMap<String, Object>(); for ( Param parameter: params ) { String value = parameter.getStringValueFromModel(context); //render it even if the value is null, since we want it //to override page parameter values which would be //appended by the redirect filter //if (value!=null) //{ parameters.put( parameter.getName(), value ); //} } if (url != null) { redirectExternal(url.getValue()); } else { redirect(viewId == null ? null : viewId.getValue(), parameters, includePageParams); } return true; } }