Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Primefaces日历允许无效日期_Date_Calendar_Primefaces - Fatal编程技术网

Date Primefaces日历允许无效日期

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' >

我正在使用primefaces日历,但允许我输入无效日期。例如,在日期字段的输入框中输入日期为32-06-2012,并保存记录。它将日期另存为2012年7月2日。同样的行为也可以在primefaces的showcase中观察到

参考:

这是我的密码

<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));
        }
    }