package org.ocpsoft.rewrite.faces; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.ocpsoft.common.services.ServiceLoader; import org.ocpsoft.rewrite.faces.spi.FacesActionUrlProvider; import org.ocpsoft.rewrite.servlet.DispatcherType; import org.ocpsoft.rewrite.servlet.spi.DispatcherTypeProvider; public class DefaultActionUrlProvider implements FacesActionUrlProvider { @SuppressWarnings("unchecked") private final Iterable<DispatcherTypeProvider> providers = ServiceLoader.load(DispatcherTypeProvider.class); @Override public String getActionURL(FacesContext context, String viewId) { HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); for (DispatcherTypeProvider provider : providers) { DispatcherType type = provider.getDispatcherType(request, (ServletContext) FacesContext .getCurrentInstance().getExternalContext().getContext()); if (type == null || type != DispatcherType.ERROR) { return FacesRewriteLifecycleListener.getOriginalRequestURL(request); } } return null; } @Override public int priority() { return 0; } }