我正在使用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。听起来哈克,但我不知道任何其他方式,应该工作。
我在这里张贴,以防上述方法完全错误,有人可以让我知道或提供替代方案的建议。谢谢
上述方法不起作用,因为在更新模型下调用Setter而不是在应用请求阶段,因此在触发事件时我无法更改backbean变量的值。
必须有办法。任何提示将不胜感激。
答案 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;
}
}