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

Simple customization bean for dates in dynamic view panel

我需要为动态视图面板编写一个简单的自定义 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">
...

我错过了什么吗?是被覆盖的好事件吗?我问是因为如果我设置 "test" 的值而不是 fmt.format(),它甚至不会显示。日志中没有任何内容,也没有可见的错误...我似乎无法在网上找到这方面的工作示例...

在自定义程序 bean 的 ExtendedViewColumnConverter.getValueAsString(FacesContext, UIComponent, Object) 方法中,如果值对象是 Date 实例,您需要 return 所需的值。

这是一个简单的例子:

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

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

java class:

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;
    }

    ...

}

当然这只是一个例子,大家可以根据自己的喜好调整

在脸上-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>