He resuelto este problema mediante la creación de un SharedNumberFormat y luego un trozo del lado del cliente vacío para la versión de servidor que no se usa nunca.
Aquí es mi SharedNumberFormat.java, que, lo has adivinado, se puede utilizar en código compartido y funcionará bien tanto en el lado del cliente y el servidor:
import java.text.DecimalFormat;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.NumberFormat;
/**
* The purpose of this class is to allow number formatting on both the client and server side.
*/
public class SharedNumberFormat
{
private String pattern;
public SharedNumberFormat(String pattern)
{
this.pattern = pattern;
}
public String format(Number number)
{
if(GWT.isClient())
{
return NumberFormat.getFormat(pattern).format(number);
} else {
return new DecimalFormat(pattern).format(number.doubleValue());
}
}
}
entonces apagar la implementación java.text.DecimalFormat en mi súper fuente:
package java.text;
/**
* The purpose of this class is to allow Decimal format to exist in Shared code, even though it is never called.
*/
@SuppressWarnings("UnusedParameters")
public class DecimalFormat
{
public DecimalFormat(String pattern) {}
public static DecimalFormat getInstance() {return null;}
public static DecimalFormat getIntegerInstance() {return null;}
public String format(double num) {return null;}
public Number parse(String num) {return null;}
}
tengo métodos adicionales de allí porque uso que del lado del servidor de clase y el compilador se mete en un ajuste de ello si no están allí.
Por último, no se olvide de agregar su etiqueta de super-fuente a su * .gwt.xml:
<super-source path="clientStubs"/>
Gracias @Bhat, pensé que esto puede ser el caso. Qué desgracia :-( – luketorjussen