validation - Date value : when entered 00/00/0000 saves as 11/30/0002 -
when enter 00/00/0000 in date range filter(to , date) in webpage, saved 11/30/0002.
i trying use setlenient(false) no luck. here part of code. hope helps. including webpage code takes values , code backing bean.
xhtml page code:
<h:panelgroup layout="block" styleclass="myworkdate"> <h:commandlink action="#{myfollowupbean.startrangefilter}" id="lnkdaterange" value="#{myfollowupbean.rangefilter.display}" /> </h:panelgroup> myfollowupbean.java: bean file
code in backing bean. dialog box pops date range filter. when enter zero, saves 11/30/0002 , processes request instead of giving error rangefiltervo - model class dates
public void startrangefilter() { command savecommand = new command() { @override public string execute(object returnobject) { rangefiltervo vo = (rangefiltervo)returnobject; rangefilter.setfromdate(vo.getfromdate()); rangefilter.settodate(vo.gettodate()); searchall(); fetch(); return null; } }; calendarrangefilterdialog dialog = new calendarrangefilterdialog(); dialog.setwidth(300); try { rangefiltervo param = (rangefiltervo) beanutils .clonebean(rangefilter); dialog.setvo(param); } catch (illegalaccessexception | instantiationexception | invocationtargetexception | nosuchmethodexception e) { } dialogframe.displaydialog(dialog, savecommand); } datetimeconverter.java: public static string getdatepattern(){ dateformat dateformat = dateformat.getdateinstance(dateformat.short, facesutils.getlocale()); string datepattern = ((simpledateformat) dateformat).topattern(); date mydate; try { if(mydate == dateformat.parse(datepattern)){ if (datepattern.indexof("mm") == -1){ datepattern = stringutils.replace(datepattern, "m", "mm"); } if (datepattern.indexof("dd") == -1){ datepattern = stringutils.replace(datepattern, "d", "dd"); } if (datepattern.indexof("yyyy") == -1){ datepattern = stringutils.replace(datepattern, "yy", "yyyy"); } } } catch (parseexception e) { // todo auto-generated catch block e.printstacktrace(); } return datepattern; } can please explain me more this?
this artifact of putting zeroes fields one-based. auto-corrects end of previous unit.
so, year 0000 = 0 ad/ce = 1 bc/bce.
"month 0" of year 1 bce becomes last month of previous year: december, 2 bce.
similarly, "day 0" of december becomes last day of previous month: november 30.
hence, 00/00/0000 corrected november 30, 2 bce. format doesn't have field era, display loses fact it's bce year.
if prefer parser reject values outside normal range, call dateformat.setlenient(false) before calling dateformat.parse(); advised parser raise exception when given such dates.
Comments
Post a Comment