package br.com.caelum.stella.faces.component; import java.io.IOException; import java.util.Map; import javax.faces.application.ResourceDependencies; import javax.faces.application.ResourceDependency; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.render.FacesRenderer; import javax.faces.render.Renderer; @FacesRenderer(componentFamily = "javax.faces.Input", rendererType = "br.com.caelum.stella.faces.component.MaskedInputRenderer") @ResourceDependencies({ @ResourceDependency(library="jquery",name="jquery.js"), @ResourceDependency(library="mask",name="mask.js") }) public class MaskedInputRenderer extends Renderer { @Override public void decode(FacesContext context, UIComponent component) { MaskedInput input = (MaskedInput) component; Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap(); String cpfValue = requestMap.get(input.getClientId(context)); if(cpfValue != null){ input.setSubmittedValue(cpfValue); } } @Override public void encodeEnd(FacesContext context, UIComponent component) throws IOException { MaskedInput input = (MaskedInput) component; encodeMarkup(context, input); encodeScript(context, input); } private void encodeScript(FacesContext context, MaskedInput input) throws IOException { ResponseWriter writer = context.getResponseWriter(); writer.startElement("script", null); writer.writeAttribute("type", "text/javascript", null); writer.write("jQuery(function($){"); writer.write("$('."+input.getDefaultClass()+"').mask('" + input.getMaskFormat() + "',{placeholder:'"+input.getPlaceHolder()+"'});"); writer.write("});"); writer.endElement("script"); } private void encodeMarkup(FacesContext context, MaskedInput input) throws IOException { String clientId = input.getClientId(context); String defaultClass = input.getDefaultClass(); String styleClass = input.getStyleClass(); styleClass = styleClass == null ? defaultClass : defaultClass + " " + styleClass; ResponseWriter writer = context.getResponseWriter(); writer.startElement("input", input); writer.writeAttribute("id", clientId, null); writer.writeAttribute("name", clientId, null); writer.writeAttribute("type", "text", null); writer.writeAttribute("size", "14", null); Object value = input.getSubmittedValue() != null ? input.getSubmittedValue() : input.getValue(); if (value != null) { writer.writeAttribute("value", value.toString(), "value"); } if(input.isDisabled()) writer.writeAttribute("disabled", "disabled", "disabled"); if(input.isReadonly()) writer.writeAttribute("readonly", "readonly", "readonly"); if(input.getStyle() != null) writer.writeAttribute("style", input.getStyle(), "style"); writer.writeAttribute("class", styleClass, "styleClass"); writer.endElement("input"); } }