package org.jboss.seam.ui.util;
import java.io.UnsupportedEncodingException;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import org.jboss.seam.navigation.Page;
import org.jboss.seam.navigation.Pages;
public class ViewUrlBuilder extends UrlBuilder
{
private Page page;
public ViewUrlBuilder(String viewId, String fragment, boolean urlEncodeParameters)
{
super(fragment, FacesContext.getCurrentInstance().getResponseWriter().getCharacterEncoding(), urlEncodeParameters);
if (viewId == null)
{
throw new NullPointerException("viewId must not be null");
}
FacesContext facesContext = FacesContext.getCurrentInstance();
String url = facesContext.getApplication().getViewHandler().getActionURL(facesContext,
viewId);
url = Pages.instance().encodeScheme(viewId, facesContext, url);
setUrl(url);
page = Pages.instance().getPage(viewId);
}
public ViewUrlBuilder(String viewId, String fragment)
{
this(viewId, fragment, true);
}
@Override
public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
{
String name = parameter.getName();
if (parameter.getValue() != null && !(name.equals(page.getConversationIdParameter().getParameterName())
&& getParameters().containsKey(name)))
{
super.addParameter(parameter);
}
}
@Override
public String getEncodedUrl() {
return FacesContext.getCurrentInstance().getExternalContext().encodeActionURL(super.getEncodedUrl());
}
}