动态视图面板中日期的简单自定义bean

时间:2018-05-17 16:18:56

标签: xpages xpages-extlib

我需要为动态视图面板编写一个简单的自定义bean,因此日期将始终显示为yyyy-MM-dd,但我不知道要覆盖哪种方法以及如何修改我的值以便显示我想要的内容。

任何入门代码都会得到应用(是的,我查看了Jesse的代码,这对我想要达到的目标来说太复杂了。)

由于

编辑:现在这是我的自定义bean中的代码,但它绝对没有...

public class DynamicViewCustomizerBean_Ben extends DominoViewCustomizer {

    public static class ExtendedViewColumnConverter extends ViewColumnConverter {
        @Override
        public String getValueAsString(final FacesContext context, final UIComponent component, final Object value) {
            if(value instanceof DateTime) {
                SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                return fmt.format(value);
            }
            if(value instanceof Date) {
                SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
                return fmt.format(value);
            }

            // for other cases, just return super
            return super.getValueAsString(context, component, value);
        }
    }
}

是的,我的自定义bean的名称在我的动态视图面板上正确设置:

<xe:dynamicViewPanel id="dynamicViewPanel1"
    showColumnHeader="true"
    customizerBean="com.videotron.xpages.DynamicViewCustomizerBean_Ben"
    var="rowData">
...

我错过了什么吗?这是被覆盖的好事吗?我问,因为如果我设置了&#34; test&#34;而不是fmt.format(),它甚至不显示。日志中没有任何内容,没有明显的错误......我似乎无法在网上找到一个有效的例子...

2 个答案:

答案 0 :(得分:1)

在定制器bean的ExtendedViewColumnConverter.getValueAsString(FacesContext, UIComponent, Object)方法中,如果值对象是Date实例,则需要返回所需的值。

这是一个简单的例子:

if (value instanceof Date) {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    return fmt.format(value);
}

答案 1 :(得分:1)

我倾向于使用一个请求范围的bean,它包含了我自己经常需要的一些有用的方法。

java类:

public class DateBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Locale locale;
    private Date now;
    private String shortDatePattern;

    public void setLocale(Locale locale) {
        this.locale = locale;
    }

    public Date getNow() {
        if (now == null) {
            now = new Date();
        }

        return now;
    }

    public String getShortDatePattern() {
        if (shortDatePattern == null) {
            SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance(
                    SimpleDateFormat.SHORT, locale);
            shortDatePattern = sdf.toLocalizedPattern()
                    .replaceAll("y+", "yyyy")
                    .replaceAll("M+","MM")
                    .replaceAll("d+", "dd");
        }

        return shortDatePattern;
    }

    ...

}

当然,这只是一个例子,你可以调整你的喜欢

在faces-config.xml中

<managed-bean>
    <managed-bean-name>date</managed-bean-name>
    <managed-bean-class>demo.DateBean
    </managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>locale</property-name>
        <value>#{facesContext.viewRoot.locale}</value>
    </managed-property>
</managed-bean> 

然后,在XPage上:

<xp:text value="#{record.myDate}">
    <xp:this.converter>
        <xp:convertDateTime type="date"
            pattern="${date.shortDatePattern}" />
    </xp:this.converter>
</xp:text>