package org.jboss.seam.ui.renderkit;
import java.io.IOException;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.jboss.seam.ui.component.UIRemote;
import org.jboss.seam.ui.util.cdk.RendererBase;
/**
* Renderer for rendering the required <script> tags for Seam Remoting
*
* @author Shane Bryzak
*/
public class RemoteRendererBase extends RendererBase
{
@Override
protected Class getComponentClass()
{
return UIRemote.class;
}
@Override
protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent component)
throws IOException
{
UIRemote remote = (UIRemote) component;
writeScript(context, remote);
}
@Override
protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent component)
throws IOException
{
writer.flush();
}
public void writeScript(FacesContext context, UIRemote remote)
throws IOException
{
ResponseWriter response = context.getResponseWriter();
Map request = context.getExternalContext().getRequestMap();
if (!request.containsKey("REMOTE_SCRIPT"))
{
response.startElement("script", null);
response.writeAttribute("type", "text/javascript", null);
response.writeAttribute("src", context.getExternalContext().getRequestContextPath()
+ "/seam/resource/remoting/resource/remote.js", null);
response.endElement("script");
request.put("REMOTE_SCRIPT", true);
}
response.startElement("script", null);
response.writeAttribute("type", "text/javascript", null);
response.writeAttribute("src", context.getExternalContext().getRequestContextPath()
+ "/seam/resource/remoting/interface.js?" +
remote.getInclude().replace(',', '&'), null);
response.endElement("script");
}
}