package org.jboss.seam.faces;
import static org.jboss.seam.annotations.Install.FRAMEWORK;
import java.util.Map;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
/**
* Access to request parameters in the JSF environment.
*
* @author Gavin King
*
*/
@Name("org.jboss.seam.web.parameters")
@BypassInterceptors
@Scope(ScopeType.STATELESS)
@Install(precedence=FRAMEWORK, classDependencies="javax.faces.context.FacesContext")
public class Parameters extends org.jboss.seam.web.Parameters
{
@Override
protected Object convertRequestParameter(String requestParameter, Class type)
{
if ( String.class.equals(type) ) return requestParameter;
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext==null)
{
throw new IllegalStateException("No FacesContext associated with current thread, cannot convert request parameter type");
}
else
{
Converter converter = facesContext.getApplication().createConverter(type);
if (converter==null)
{
throw new IllegalArgumentException("no converter for type: " + type);
}
UIViewRoot viewRoot = facesContext.getViewRoot();
return converter.getAsObject(
facesContext,
viewRoot==null ? new UIViewRoot() : viewRoot, //have to pass something here, or get a totally useless NPE from JSF
requestParameter );
}
}
@Override
public Map<String, String[]> getRequestParameters()
{
FacesContext facesContext = FacesContext.getCurrentInstance();
if ( facesContext != null )
{
return facesContext.getExternalContext().getRequestParameterValuesMap();
}
return super.getRequestParameters();
}
}