我有这个组件:
<rich:calendar enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy" />
我需要验证所选日期是否相等,还是在实际日期之前... 有没有怎么做只有富人:日历或者我必须验证它到家里?
问题解决了!我使用了Balusc提供的解决方案。 谢谢大家! :)
答案 0 :(得分:10)
要在服务器端验证它,您可以使用Validator
。
<rich:calendar ...>
<f:validator validatorId="notAfterToday" />
</rich:calendar>
与
@FacesValidator("notAfterToday")
public class NotAfterTodayValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
Date date = (Date) value;
Date today = new Date();
if (date.after(today)) {
String message = "Date may not be later than today.";
throw new ValidatorException(new FacesMessage(message));
}
}
}
答案 1 :(得分:4)
你应该能够使用JavaScript(所以在客户端)。如果你查看Client API doc,就可以看到rich:calendar组件提供了getCurrentDate()
JavaScript函数。
所以你需要做的是在JavaScript事件ondateselected
和oninputchange
上启动一个JavaScript函数,它将使用getCurrentDate()
方法并与当前日期进行比较。
类似的东西(我没有测试):
<h:form id="myForm">
...
<rich:calendar id="myCalendar" enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy"
ondateselected="checkDate();" oninputchange="checkDate();"/>
...
和
<script type="text/javascript">
function checkDate() {
var choosenDate = $("myForm:myCalendar").component.getCurrentDate();
var now = new Date();
// Calculate the difference between the 2 dates.
// This method may be modified if you want to only compare date (i.e. not time).
var diff = choosenDate.getTime() - now.getTime();
if (diff < 0) {
// choosenDate is before today
alert("Error in the selected date!");
// Do what you want here...
}
}
</script>