All pastes #90377 Raw Edit

Something

public text v1 · immutable
#90377 ·published 2006-07-17 16:56 UTC
rendered paste body
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;
    }    
}