提问人:Maria1995 提问时间:11/6/2023 更新时间:11/6/2023 访问量:41
将 Primefaces datePicker 小时、分钟和秒限制为给定值
Limit the Primefaces datePicker hour, minutes and seconds to given values
问:
我正在使用 datePicker Primefaces 元素,以便允许用户选择小时、分钟和秒的值。目前,小时的值介于 0 和 24 之间,分钟介于 0 和 60 之间,秒数相同。
我想将这种选择的可能性限制为一些静态值,这些值是通过获取页面上发布的视频长度获得的。
因此,例如,如果视频有 1 分 30 秒,我希望小时部分不允许用户向上或向下按箭头,分钟最多为 30 分钟,分钟为 1。 我尝试了下面的代码,但它不起作用 - 当我进入页面时,我设法看到视频的最大长度,但是如果我从 datePicker 元素中移动箭头,我可以选择任何内容。
我能做些什么?
UI datePicker 元素:
<p:outputPanel styleClass="input-group timestamp-input">
<p:datePicker id="timeDatePicker"
widgetVar="widgetVarOfDatePicker"
value="#{traineeDashboard.newIncidentTimestamp}"
timeOnly="true"
showSeconds="true"
appendTo="@this">
<f:converter converterId="timeConverter"/>
</p:datePicker>
JS代码:
function setMaxTimeForDatePicker(hours, minutes, seconds) {
var timePicker = PF('widgetVarOfDatePicker');
var hoursDropdown = $('div.ui-hour-picker span:eq(1)');
var minutesDropdown = $('div.ui-minute-picker span:eq(1)');
var secondsDropdown = $('div.ui-second-picker span:eq(1)');
hoursDropdown.text(hours);
minutesDropdown.text(minutes);
secondsDropdown.text(seconds);
hoursDropdown.trigger('change');
minutesDropdown.trigger('change');
secondsDropdown.trigger('change');
}
$(function() {
var timePicker = PF('widgetVarOfDatePicker'); // Replace with your actual widgetVar
// Override the behaviors for incrementing and decrementing hours, minutes, and seconds
timePicker.cfg.onHourChange = function(newHour) {
let maxHour = 2;
let minHour = 0;
if (newHour < minHour || newHour > maxHour) {
// Set the hour back to the minimum or maximum as appropriate
this.setTime(minHour, this.currentMinute, this.currentSecond);
}
};
timePicker.cfg.onMinuteChange = function(newMinute) {
if (newMinute < minMinute || newMinute > maxMinute) {
// Set the minute back to the minimum or maximum as appropriate
this.setTime(this.currentHour, minMinute, this.currentSecond);
}
};
timePicker.cfg.onSecondChange = function(newSecond) {
if (newSecond < minSecond || newSecond > maxSecond) {
// Set the second back to the minimum or maximum as appropriate
this.setTime(this.currentHour, this.currentMinute, minSecond);
}
};
});
答:
使用组件的 和 属性。由于要限制时间(小时、分钟、秒),因此可以将 和 设置为相同的日期,但时间不同。minDate
maxDate
p:datePicker
minDate
maxDate
首先,您需要创建一个具有您希望允许的最长时间的对象。为此,您可以创建一个对象,设置小时、分钟和秒,然后获取该对象。java.util.Date
java.util.Calendar
java.util.Date
例;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, maxHour);
calendar.set(Calendar.MINUTE, maxMinute);
calendar.set(Calendar.SECOND, maxSecond);
Date maxTime = calendar.getTime();
然后,将此对象设置为组件的属性。Date
maxDate
p:datePicker
在上面的代码中,是您在托管 Bean 中创建的对象。traineeDashboard.minDate
traineeDashboard.maxTime
Date
这样,用户将无法选择超出您指定范围的时间。
请记住将 and 属性设置为相同的日期,但时间不同。例如,如果要允许从 00:00:00 到 01:30:00 的时间范围,则可以将 设置为 00:00:00 和 设置为 01:30:00。minDate
maxDate
minDate
maxDate
另请注意,和属性接受对象,而不是 or 对象。如果使用的是类,则可以使用类或类将它们转换为对象。minDate
maxDate
java.util.Date
java.time.LocalDateTime
java.time.LocalTime
java.time
java.util.Date
java.sql.Timestamp
java.time.Instant
评论