Ниже приведен фрагмент кода из метода getValueAsString()
из класса ExtendedViewColumnConverter
, который обрабатывает форматирование чисел на основе пользовательской локали.
Код предполагает, что переменная currentLocale
содержит локаль пользователя. currentLocale - это экземпляр java.util.Locale.Locale, и я предполагаю, что у вас есть логик, который обрабатывает это, например. как часть пользовательского компонента. Если нет, то один из способов получения текущей локали, чтобы сделать это:
Locale currentLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
Вы должны, конечно, иметь уже работающий настройщик боб (который расширяет DominoViewCustomizer
).
public static class ExtendedViewColumnConverter extends ViewColumnConverter {
...
@Override
public String getValueAsString(final FacesContext context, final UIComponent component, final Object value) {
if (value instanceof Number) {
NumberFormat nf = NumberFormat.getInstance(currentLocale);
DecimalFormat df = (DecimalFormat) nf;
df.setRoundingMode(RoundingMode.HALF_UP);
switch (this.colDef.getNumberFmt()) {
case ViewColumn.FMT_GENERAL: {
// no further formatting needed
break;
}
case ViewColumn.FMT_FIXED: {
df.setMinimumFractionDigits(this.colDef.getNumberDigits());
df.setMaximumFractionDigits(this.colDef.getNumberDigits());
break;
}
default: {
// no further formatting needed
break;
}
}
return df.format(value);
}
}
...
}
Thanks Per. Где переменная currentlocale? Это свойство? –
Я добавил объяснение currentLocale –
Прошу прощения, но у меня мало опыта работы с java. Я помещаю ваш код в свой bean-customizer и выдаю ошибку «colDef не может быть разрешен или не является полем» на строке: switch (this.colDef.getNumberFmt()). –