在xpage中的dynamyc视图面板中格式化列号

时间:2016-10-15 23:07:35

标签: xpages

我在XPage中使用动态视图面板。格式化数字的问题不遵循视图列中定义的格式。 我搜索并发现格式化数字的方法是通过定制器bean。我已经有了这个bean的一些代码示例,尽管它们都没有格式化包含数字的列的示例。 有没有人有这种处理格式的例子?

非常感谢!

1 个答案:

答案 0 :(得分:0)

以下是来自getValueAsString()类的ExtendedViewColumnConverter方法的代码段,该方法根据用户区域设置处理数字格式。

代码假定变量currentLocale包含用户区域设置。 currentLocale是java.util.Locale.Locale的一个实例,我假设你有logik来处理这个问题,例如:作为用户bean的一部分。如果没有,那么获取当前语言环境的一种方法是:

Locale currentLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();

你当然应该有一个已经工作的定制器bean(扩展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);
        }
    }

    ...

}