Rich: Календарь устанавливает время как текущее системное время вместо значения по умолчанию - PullRequest
0 голосов
/ 06 марта 2012

Я использую RichFaces 3.3.3 и пытаюсь выяснить, как установить часть времени Rich:Cal в качестве текущей системной даты вместо значения по умолчанию 12:00, где шаблон даты - dd/M/yyyy HH:mm. Я также не заинтересован в использовании атрибута DefaultTime, так как в моей ситуации он бесполезен.

так Вопрос: я пропустил его или невозможно включить текущее системное время, когда пользователь выбирает ячейку даты?

2 - Если ответ на вопрос выше невозможен , то каков наилучший способ реализовать такое поведение?

Внизу будет хорошо:

    <rich:calendar id="richCal1"                                
        value="#{cust.dateFrom1}"
        datePattern="dd/M/yyyy HH:mm"
        enableManualInput="true"
        <f:convertDateTime pattern="dd/M/yyyy HH:mm" type="both"/>
        <f:validator validatorId="#{cust.dateAppend}"/>
        <f:attribute name="richCalendar" value="RichCalendar1" />
    </rich:calendar>

Таким образом, когда пользователь выбирает дату, в пользовательском валидаторе Backbean dateAppend я определю элемент, с которого сработал триггер using the UIComponent.getAttributes() which for above code will be richCalendar, и, следовательно, узнаю, какую переменную backbean нужно обновить, чтобы перезаписать время по умолчанию на системное время. Звучит хаки, но я не знаю другого пути и должен работать.

Я пишу здесь, так что в случае, если описанный выше подход совершенно неправильный, кто-то может дать мне знать или дать совет по альтернативам. Спасибо

UPDATE:

Приведенный выше подход не будет работать, поскольку сеттеры вызываются в модели обновления, а не в фазе запроса на применение, и поэтому я не могу изменить значение переменной backbean при возникновении события.

должен быть способ. Любые советы будут с благодарностью.

1 Ответ

1 голос
/ 07 марта 2012

Вам необходимо реализовать пользовательский CalendarDataModel и назначить его в качестве dataModel для календаря.

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.richfaces.model.CalendarDataModel;
import org.richfaces.model.CalendarDataModelItem;

@Name("richCalendarDataModel")
@BypassInterceptors
public class RichCalendarDataModel implements CalendarDataModel {


    public CalendarDataModelItem[] getData(Date[] arg0) {
        RichCalendarDataItem[] date = new RichCalendarDataItem[arg0.length];
        int i = 0;
        for (Date dd : arg0) {
            Date myCustomDate = ...; //create your custom date here from original dd
            RichCalendarDataItem tmp = new RichCalendarDataItem(myCustomDate, true);
            date[i] = tmp;
            i++;
        }

        return date;
    }


    public Object getToolTip(Date arg0) {
        ...
    }

}

calendarDataModelItem:

import java.util.Date;

import org.richfaces.model.CalendarDataModelItem;

public class RichCalendarDataItem implements CalendarDataModelItem {

private Date data;

private boolean enabled;

public RichCalendarDataItem(Date dd, boolean en) {
    data = dd;
    enabled = en;
}

public int getDay() {
    return 0;
}

public Object getData() {
    return data;
}

public String getStyleClass() {
    return null;
}

public Object getToolTip() {
    return null;
}

public boolean hasToolTip() {
    return false;
}

public boolean isEnabled() {
    return enabled;
}

}

...