wicket - 格式为支持1,000而不是1000的文本字段

时间:2014-04-22 13:31:25

标签: java-ee wicket

我想在客户端显示字符串1,000,其中acutall值为int x = 1000为整数 我怎么能这样做?

我试图通过生成新课来做到这一点 myTextFiels

@Override
public <C> IConverter<C> getConverter(Class<C> type) {
    IConverter<C> converter = super.getConverter(type);
    if (converter instanceof AbstractDecimalConverter<?>) {

        ((AbstractDecimalConverter<?>) converter).getNumberFormat(getLocale()).setGroupingUsed(true);
    } else {
        ((AbstractIntegerConverter<?>) converter).getNumberFormat(getLocale()).setGroupingUsed(true);
    }

    return converter;
}

但这似乎不起作用,我缺少什么

2 个答案:

答案 0 :(得分:1)

当您在转换器上执行getNumberFormat()时,它不会返回对转换器将使用的NumberFormat实例的引用,而是返回实例的克隆:

@Override
public NumberFormat getNumberFormat(final Locale locale)
{
    NumberFormat numberFormat = numberFormats.get(locale);
    if (numberFormat == null)
    {
        numberFormat = newNumberFormat(locale);
        setNumberFormat(locale, numberFormat);
    }
    return (NumberFormat)numberFormat.clone();
}

这是直接从AbstractDecimalConverter的代码中获取的。因此,要在代码中实现您想要的功能,请执行以下操作:

AbstractDecimalConverter castConverter = (AbstractDecimalConverter<?>) converter;
NumberFormat newNumberFormatForLocale = castConverter.getNumberFormat(getLocale());
newNumberFormatForLocale.setGroupingUsed(true);
castConverter.setNumberFormat(getLocale(), newNumberFormatForLocale);

然而当你这样做时,你需要了解一些事情:使用super.getConverter的全局转换器定位器检索从Application获得的转换器。默认情况下,转换器定位器包含每种类型的单例转换器。

这意味着如果您以某种方式在某个页面的某个位置更改此格式,那么该区域设置的所有其他页面也将使用该格式。我可以想象这可能是可以的,但如果不是,那么不是改变你从NumberFormat检索的转换器上的super.getConverter()我会创建{{1}的新实例在AbstractDecimalConverter方法中设置了所需的getConverter并返回该值,在这种情况下,全局单例保持不变。

如果您想要任何详细说明,请回复。

答案 1 :(得分:0)

也许不是最漂亮的解决方案,但这里有一些解决它的代码

public static String numberformatter(int n){
    String number = "";

    int leftpart = n / 1000;
    int rightpart = n - (leftpart * 1000);
    number = rightpart + number;

    while(leftpart > 0){
        int old = leftpart;
        leftpart = old / 1000;
        rightpart = old - (leftpart * 1000);
        number = rightpart + "," + number;
    }

    return number;
}