rendered paste bodypackage 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;
}
}