The problem I am having is with the PrimesFaces 3.4.1 calendar. When using the popup date picker activated either through the button or on input field focus you can only select valid dates which work fine, happy days!
The issues comes when you manually add a date into the input field, if you add an invalid date the PrimeFaces calendar component takes its best guess at converting this into a valid date and then sending it, meaning that back-end validation is a no go. Some interesting translations below:
To recreate this madness have a look at the PrimeFaces Calendar Showcase.
I have seen solution around using the readOnlyInput='true'
attribute but that only seems to prevent letters being entered in the field not number or slashes. Below is one instance of the calendar I have implemented:
<p:calendar id="fldDateOfBirth"
value="#{pc_CreateUser.user.dateOfBirth}"
binding="#{pc_CreateUser.dobComp}"
navigator="true"
pattern="dd/MM/yyyy"
maxlength="10"
yearRange="-100"
validator="#{pc_CreateUser.validateDOB}"
title="#{msg.user_date_format_default_tip}"
converterMessage="#{msg.user_error_dob_invalid}"
readOnlyInput="true"
showOn="button" />
Solution wise I am open to any suggestions:
Thanks in advance, this has been causing me issues for weeks!
The <p:calendar>
uses under the covers SimpleDateFormat
which in turn uses by default lenient parsing, causing the overflowed values to roll over into the next date metric level. E.g. 32 January would become 1 February, etc.
In plain Java terms, this can be turned off by DateFormat#setLenient()
, passing false
. See also among others this question: validating a date using dateformat.
In JSF terms, you basically need to provide a custom converter which uses a non-lenient DateFormat
. Fortunately, standard JSF already provides such one out the box in flavor of <f:convertDateTime>
, so you could just make use of it directly.
<p:calendar ...>
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:calendar>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With