Rich:日历设置时间为当前系统时间而不是默认值

时间:2012-03-06 12:09:08

标签: jsf richfaces

我正在使用RichFaces 3.3.3并且一直试图弄清楚如何将Rich:Cal的时间部分设置为当前系统日期而不是默认12:00,其中日期模式为{{ 1}}。我也不感兴趣使用dd/M/yyyy HH:mm属性,因为它在我的情况下毫无用处。

所以问题是:我错过了它还是当用户选择日期单元时不可能包含当前的系统时间?

2 - 如果上述答案不可能,那么实施此类行为的最佳方法是什么。

下面会有任何好处:

DefaultTime

因此,当用户选择日期时,在Backbean自定义验证程序 <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> 中,我将确定触发器从dateAppend触发的元素,从而知道要更新哪个backbean变量以覆盖默认的Time with System time。听起来哈克,但我不知道任何其他方式,应该工作。

我在这里张贴,以防上述方法完全错误,有人可以让我知道或提供替代方案的建议。谢谢

UPDATE:

上述方法不起作用,因为在更新模型下调用Setter而不是在应用请求阶段,因此在触发事件时我无法更改backbean变量的值。

必须有办法。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要实现自定义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;
}

}