package org.apache.myfaces.custom.inputnumber; import java.io.IOException; import java.math.BigInteger; import java.util.Map; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.ConverterException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.myfaces.renderkit.html.util.AddResource; import org.apache.myfaces.renderkit.html.util.AddResourceFactory; import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr; import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils; import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils; import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTextRendererBase; public class HtmlInputNumberRenderer extends HtmlTextRendererBase { private static final Log log = LogFactory.getLog(HtmlInputNumberRenderer.class); public void encodeBegin(FacesContext context, UIComponent component) throws IOException { encodeJavascript(context, component); super.encodeBegin(context, component); } public void encodeEnd(FacesContext context, UIComponent component) throws IOException { log.debug("encodeEnd in HtmlInputNumberRenderer"); RendererUtils.checkParamValidity(context, component, HtmlInputNumber.class); if (HtmlRendererUtils.isDisplayValueOnly(component) || isDisabled(context, component)) { super.encodeEnd(context, component); return; } HtmlInputNumber comp = (HtmlInputNumber) component; comp.setOnkeydown("return verifyKey(event, false);"); super.encodeEnd(context, component); } /** * Encodes any stand-alone javascript functions that are needed. * Uses either the extension filter, or a * user-supplied location for the javascript files. * * @param context FacesContext * @param component UIComponent */ private void encodeJavascript(FacesContext context, UIComponent component) { // AddResource takes care to add only one reference to the same script String javascriptLocation = (String)component.getAttributes().get(JSFAttr.JAVASCRIPT_LOCATION); AddResource addResource = AddResourceFactory.getInstance(context); if(javascriptLocation != null) { // add user defined javascripts addResource.addJavaScriptAtPosition(context, AddResource.HEADER_BEGIN, javascriptLocation + "/inputnumber.js"); } else { addResource.addJavaScriptAtPosition(context, AddResource.HEADER_BEGIN, HtmlInputNumber.class, "inputnumber.js"); } } public void decode(FacesContext facesContext, UIComponent uiComponent) { RendererUtils.checkParamValidity(facesContext, uiComponent, HtmlInputNumber.class); HtmlInputNumber inputNumber = (HtmlInputNumber) uiComponent; if( isDisabled(facesContext, inputNumber)) // For safety, do not set the submited value if the component is disabled. return; String clientId = inputNumber.getClientId(facesContext); Map requestMap = facesContext.getExternalContext().getRequestParameterMap(); String type = inputNumber.getType(); String value = (String) requestMap.get(clientId); if(type.equals("integer")) inputNumber.setSubmittedValue(new Integer(value)); else if(type.equals("byte")) inputNumber.setSubmittedValue(new Byte(value)); else if(type.equals("short")) inputNumber.setSubmittedValue(new Short(value)); else if(type.equals("long")) inputNumber.setSubmittedValue(new Long(value)); else if(type.equals("double")) inputNumber.setSubmittedValue(new Double(value)); else if(type.equals("float")) inputNumber.setSubmittedValue(new Float(value)); else if(type.equals("biginteger")) inputNumber.setSubmittedValue(new BigInteger(value)); } public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object submittedValue) throws ConverterException { return submittedValue; } }