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

Popular posts from this blog

php - SPIP: From Tag directly to an article -

jquery - isAjaxRequest always return false -

ruby on rails - In a controller spec, how to find a specific tag in the generated view? -