Date Primefaces日历允许无效日期
我正在使用primefaces日历,但允许我输入无效日期。例如,在日期字段的输入框中输入日期为32-06-2012,并保存记录。它将日期另存为2012年7月2日。同样的行为也可以在primefaces的showcase中观察到 参考: 这是我的密码Date Primefaces日历允许无效日期,date,calendar,primefaces,Date,Calendar,Primefaces,我正在使用primefaces日历,但允许我输入无效日期。例如,在日期字段的输入框中输入日期为32-06-2012,并保存记录。它将日期另存为2012年7月2日。同样的行为也可以在primefaces的showcase中观察到 参考: 这是我的密码 <p:calendar id="copyStartDateCalendar" pattern="dd/MM/yyyy" mode="popup" showOn="button" size='8' >
<p:calendar id="copyStartDateCalendar" pattern="dd/MM/yyyy"
mode="popup" showOn="button" size='8' >
<f:convertDateTime pattern="MM/yyyy" />
</p:calendar>
由于组件本身似乎有一些错误,应该怎么做
谢谢和问候
Tarun Madaan我对primefaces日历也有类似的问题 对于其中一个,它通过设置模式
pattern=“dd.MM.yyyy”
接受两位数的日期。如20.06.12
将在日历弹出窗口中显示为20.06.2012
误导用户认为日期已正确识别。但是12年实际上已经确定了
总之,我在
中设置了一个
,如下所示:
<p:calendar value="#{abschnittDView.bogen.pruefungsDatum}
mode="popup" locale="de" pattern="dd.MM.yyyy" required="true"
requiredMessage="Please provide a date."
converterMessage="Date is invalid.">
<f:convertDateTime type="date" pattern="dd.MM.yyyy"
timeZone="Europe/Berlin" locale="de" />
<f:validator validatorId="de.common.DateValidator" />
</p:calendar>
尝试使用readonly=“true”
在这种情况下,您不需要使用任何服务器端验证器。此选项只允许最终用户从日历面板选择日期。您的模式和f:convertDateTime有不同的模式吗
在输入数据时,它可能无法确定您想要在转换器中输入什么
dd/mm/yyyy-然后转换器尝试将其转换为mm/yyy
您描述的问题是因为在side primfaces中的简单日期格式化程序中将Lenence设置为true(这是默认操作)。强制是您然后使用您的convertDatetime,它应该修复它,但您的模式可能与它看起来不匹配
但是,,如果使用PF<4的verison,那么您将遇到java脚本问题,因为p:calendar转换器在验证后返回空对象时存在错误-您可以在重建PF代码后在PF代码中对此进行一些手动修复。这是否适用于PrimeFaces问题,例如将无效日期(如“2012年2月30日”)转换为“2014年6月2日”因为当它到达后端时,它已经被转换为一个有效的日期了吗?以上要点的进一步细节:他的问题是一个“日”/“月”的两位数字滚动并映射到未来/过去的一个适当的月份-这是由于SimpleDateformat具有Lency true,使用转换器应该解决这个问题。:)
@FacesValidator(DateValidator.VALIDATOR_ID)
public class DateValidator implements Validator {
public static final String VALIDATOR_ID = "de.common.DateValidator";
@Override
public void validate(FacesContext facesContext, UIComponent component,
Object value) throws ValidatorException {
Date inputDate = (Date) value;
Calendar cal = Calendar.getInstance();
cal.setTime(inputDate);
if (cal.get(Calendar.YEAR) < 1000) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Please provide a date with 4 digits for the year", null));
}
}