You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gc...@apache.org on 2010/08/27 19:41:52 UTC
svn commit: r990213 -
/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java
Author: gcrawford
Date: Fri Aug 27 17:41:52 2010
New Revision: 990213
URL: http://svn.apache.org/viewvc?rev=990213&view=rev
Log:
TRINIDAD-1896 in some cases custom hints not available for number converter
Modified:
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java?rev=990213&r1=990212&r2=990213&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/NumberConverter.java Fri Aug 27 17:41:52 2010
@@ -130,6 +130,24 @@ public class NumberConverter extends org
return null;
}
+ private String _getPattern(FacesContext context, Object value)
+ {
+ boolean isConvertibleType = _isTypeClientConvertible(value);
+
+ if (!isConvertibleType)
+ {
+ // whenever you have a pattern we don't attempt to do conversion on the client,
+ // so if this is not a convertible type, return a bogus pattern so
+ // that the client converter won't attempt to convert,
+ // but the custom hints will still be sent down.
+ return "0";
+ }
+
+ // We call this since the pattern may contain the generic currency sign, which we don't
+ // want to display to the user.
+ return getLocalizedPattern(context, getPattern(), null);
+ }
+
/**
* Helper method, that creates an Object array, which contains all
* required constructor parameters for the TrNumberConverter class.
@@ -139,7 +157,7 @@ public class NumberConverter extends org
* formatted numbers, like currencyCode or maximumIntegerDigits.
*
*/
- private Object[] _getClientConstructorParams(FacesContext context, Map<?, ?> messages)
+ private Object[] _getClientConstructorParams(FacesContext context, Object value, Map<?, ?> messages)
{
Object[] params;
boolean formating = _formatingAttributesSet();
@@ -149,9 +167,7 @@ public class NumberConverter extends org
else
params = new Object[4];
- // We call this since the pattern may contain the generic currency sign, which we don't
- // want to display to the user.
- params[0] = getLocalizedPattern(context, getPattern(), null);
+ params[0] = _getPattern(context, value);
params[1] = this.getType();
params[2] = this.getLocale() != null ? this.getLocale().toString() : null;
@@ -222,22 +238,12 @@ public class NumberConverter extends org
}
}
}
- }
-
- // Only render a client converter if the input value is bound to a supported type
- // (Float, Double, Integer, Short, Byte). The JavaScript number is a 64-bit floating type and
- // has enough precision to represent any of these supported types.
- if (!(value instanceof Float || value instanceof Double || value instanceof Integer
- || value instanceof Short || value instanceof Byte))
- {
- _LOG.warning("UNSUPPORTED_NUMBERCONVERTER_TYPE");
- return null;
- }
+ }
StringBuilder outBuffer = new StringBuilder(250);
outBuffer.append("new TrNumberConverter(");
- Object[] params = _getClientConstructorParams(context, messages);
+ Object[] params = _getClientConstructorParams(context, value, messages);
for (int i = 0; i < params.length; i++)
{
try
@@ -255,6 +261,21 @@ public class NumberConverter extends org
return outBuffer.toString();
}
+ private boolean _isTypeClientConvertible(Object value)
+ {
+ // Only render a client converter if the input value is bound to a supported type
+ // (Float, Double, Integer, Short, Byte). The JavaScript number is a 64-bit floating type and
+ // has enough precision to represent any of these supported types.
+ if (value instanceof Float || value instanceof Double || value instanceof Integer
+ || value instanceof Short || value instanceof Byte)
+ {
+ return true;
+ }
+
+ _LOG.warning("UNSUPPORTED_NUMBERCONVERTER_TYPE");
+ return false;
+ }
+
/*
* This method returns true if the locale specified for NumberConverter is
* different from the locale specified in Adf-faces-config or the client