【问题标题】:Rich:Calendar Set Time as Current System Time instead of DefaultRich:Calendar 将时间设置为当前系统时间而不是默认时间
【发布时间】:2012-03-06 12:09:08
【问题描述】:

我正在使用 RichFaces 3.3.3 并试图弄清楚如何将 Rich:Cal 的时间部分设置为当前系统日期,而不是日期模式为 dd/M/yyyy HH:mm 的默认 12:00 。我也对使用 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 变量以用系统时间覆盖默认时间。听起来很哈克,但我不知道任何其他方式,应该可以工作。

我在这里发帖,所以如果上述方法完全错误,有人可以让我知道或提供有关替代方案的建议。谢谢

更新:

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

一定有办法。任何提示将不胜感激。

【问题讨论】:

    标签: jsf richfaces


    【解决方案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;
    }
    

    }

    【讨论】:

    • 感谢您的提醒。我查看了UICalendar.java 源代码(goo.gl/Phf0z),它是 ---> /** * Returns default value of "defaultTime" attribute * @return default value of "defaultTime" attribute */ protected Object getDefaultValueOfDefaultTime() { Calendar calendar = getCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 12); calendar.set(Calendar.MINUTE, 0); return calendar.getTime(); } 非常感谢
    猜你喜欢
    • 2018-12-23
    • 2014-06-03
    • 2016-12-04
    • 1970-01-01
    • 2013-06-20
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多