Простой компонент настройки для дат в панели динамического просмотра - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно написать простой компонент настройки для панели динамического просмотра, чтобы даты всегда отображались в виде гггг-ММ-дд, но я не знаю, какой метод перезаписать и как изменить мое значение, чтобы оно показывало то, что я хочу.

Любой начальный код будет оценен (и да, я посмотрел на код Джесси, и он слишком сложен для того, чего я хочу достичь).

Спасибо


Редактировать: теперь этот код у меня в бобе настройки, но он абсолютно ничего не делает ...

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

И да, имя моего компонента настройки настроено правильно на моей панели динамического просмотра:

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

Я что-то упустил? Это хорошее событие, которое отменяется? Я спрашиваю, потому что, если я устанавливаю значение «test» вместо fmt.format (), оно даже не отображается. Ничего в журналах, никаких видимых ошибок ... Кажется, я не могу найти работающий пример этого в Интернете ...

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я склонен использовать 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;
    }

    ...

}

Конечно, это простоНапример, вы можете настроить его как

В файле face-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>
0 голосов
/ 17 мая 2018

В методе ExtendedViewColumnConverter.getValueAsString(FacesContext, UIComponent, Object) вашего bean-компонента настройщика необходимо вернуть желаемое значение, если объект значения является экземпляром Date.

Вот простой пример:

if (value instanceof Date) {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    return fmt.format(value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...