Retrofitting

Ted Husted
Ted HustedRelease Engineer at NimbleUser
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Struts on Ajax:  Retrofitting Struts with Ajax Taglibs Tuesday, September 30th, 9a-10a Ted Husted
Struts on Ajax:  Retrofitting Struts with Ajax Taglibs Square One University Series
[object Object],[object Object],Struts on Ajax
Abstract ,[object Object],[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
What is Ajax? ,[object Object],[object Object],[object Object],[object Object]
What was life like before Ajax? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
How does Ajax work? ,[object Object],[object Object],[object Object],[object Object]
Can we use Ajax in a Struts app? ,[object Object],[object Object],[object Object],[object Object],[object Object]
public   class  IndexResult  extends  Action { public  ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws  Exception { response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); out.println( "Hello World! “ +  “ This is an AJAX response “ +  “ from a Struts Action." ); out.flush(); return   null ; } } actions.IndexResult.java
public   class  IndexResult2  extends ActionSupport { private  InputStream  inputStream ; public  InputStream getInputStream() { return   inputStream ; } public  String execute()  throws  Exception { inputStream =  new  StringBufferInputStream( "Hello World! This is an AJAX response " +  "from a Struts 2 Action." ); return   SUCCESS ; } } actions.IndexResult2.java
What are some pure Ajax Libraries? ,[object Object],[object Object]
http://www.prototypejs.org/
http://jquery.com/
What are some Ajax UI Libraries? ,[object Object],[object Object]
[object Object]
[object Object]
Are there Ajax JSP tag libraries? ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
Why choose AjaxParts Taglib? ,[object Object],[object Object],[object Object],[object Object]
Why choose AjaxParts Taglib? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
How about a Simple Hello World Example? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
How about a Simple Hello World Example? ,[object Object],[object Object],[object Object],[object Object],[object Object]
< html > < head > < title > Simple Hello World Example </ title > </ head > < body > < input  id = &quot;hello-button&quot;  type = &quot;button&quot;  value = &quot;Say Hello World via AJAX&quot;  /> < br  />< br  /> < div  id = &quot;hello-div&quot; ></ div > </ body > </ html > index.jsp
<%@  taglib  prefix = &quot;ajax&quot;  uri = &quot;javawebparts/ajaxparts/taglib&quot;  %> < html > < head > < title > Simple Hello World Example </ title > </ head > < body > < input  id = &quot;hello-button&quot;   type = &quot;button&quot;  value = &quot;Say Hello World via AJAX&quot;  /> < ajax:event  attachTo = &quot;hello-button&quot; ajaxRef = &quot;index/hello-button&quot; /> < br  />< br  /> < div  id = &quot;hello-div&quot; ></ div > < ajax:enable  /> </ body > </ html > index.jsp
ajax-config.xml < ajaxConfig > < group  ajaxRef = &quot;index&quot; > < element  ajaxRef = &quot;hello-button&quot; > < event  type = &quot;onclick&quot; > < requestHandler  type = &quot;std:SimpleRequest&quot; target = &quot; index-result.txt &quot; > < parameter  /> </ requestHandler > < responseHandler  type = &quot;std:InnerHTML&quot; > < parameter > hello-div </ parameter > </ responseHandler > </ event > </ element > </ group > </ ajaxConfig >
Hello World! I am an AJAX result from the (mock) server. index-result.txt
<web-app> <context-param> <param-name> AjaxPartsTaglibConfig </param-name> <param-value> /WEB-INF/ajax-config.xml </param-value>   </context-param> <context-param> <param-name> AjaxPartsTaglibValidateConfig </param-name> <param-value> false </param-value> </context-param> web.xml
What JARS do we need? ,[object Object],[object Object],[object Object]
 
 
Can we use a Struts action instead? ,[object Object]
public   class  IndexResult  extends  Action { public  ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws  Exception { response.setContentType( &quot;text/html&quot; ); PrintWriter out = response.getWriter(); out.println( &quot;Hello World! “ +  “ This is an AJAX response “ +  “ from a Struts Action.&quot; ); out.flush(); return   null ; } } actions.IndexResult.java
< action path = &quot;/index-result&quot; type = &quot;actions.IndexResult&quot; validate = &quot;false&quot;  /> struts-config.xml
<requestHandler type=&quot;std:SimpleRequest&quot; target=&quot;index-result.txt&quot;>   < requestHandler  type = &quot;std:SimpleRequest&quot; target = &quot;/index-result.do&quot; >   ajax-config.xml
 
How about Struts 2? ,[object Object],[object Object],[object Object]
public   class  IndexResult2  extends ActionSupport { private  InputStream  inputStream ; public  InputStream getInputStream() { return   inputStream ; } public  String execute()  throws  Exception { inputStream =  new  StringBufferInputStream( &quot;Hello World! This is an AJAX response &quot; +  &quot;from a Struts 2 Action.&quot; ); return   SUCCESS ; } } actions.IndexResult2.java
< package  name = &quot;ajaxwebparts&quot;  extends = &quot;struts-default&quot; > < action  name = &quot;index-result&quot; class = &quot;actions.IndexResult2&quot; > < result  type = &quot;stream&quot; > < param  name = &quot;contentType&quot; > text/html </ param > < param  name = &quot;inputName&quot; > inputStream </ param > </ result > </ action > </ package > struts.xml
<requestHandler type=&quot;std:SimpleRequest&quot; target=&quot;/index-result.do&quot;>   < requestHandler  type = &quot;std:SimpleRequest&quot; target = &quot;/index-result.action&quot; >   ajax-config.xml
 
Is it really that easy? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
How does AjaxParts work? ,[object Object],[object Object],[object Object]
< ajaxConfig > < group  ajaxRef = &quot; index &quot; > < element  ajaxRef = &quot; hello-button &quot; > < event  type = &quot;onclick&quot; > < requestHandler  type = &quot;std:SimpleRequest&quot;  target = &quot; index-result.action &quot; > < parameter  /> How does AjaxParts work? <body> < input  id = &quot;hello-button&quot;   type = &quot;button&quot;  value = &quot;Say Hello World via AJAX&quot;  /> < ajax:event  attachTo = &quot;hello-button“ ajaxRef = &quot; index/hello-button &quot;  />
< responseHandler  type = &quot;std:InnerHTML&quot; > < parameter > hello-div </ parameter > </ responseHandler > < br  />< br  /> < div  id = &quot; hello-div &quot; ></ div > </ body > < ajax:enable  /> How does AjaxParts work?
What does <ajax:event> do? ,[object Object]
What does <ajax:event> do? < input  id = &quot;helloButton&quot;  type = &quot;button&quot;  value = &quot;Say Hello World via AJAX&quot;  /> < ajax:event    attachTo = &quot;helloButton&quot;    ajaxRef = &quot;index/hello-button&quot; /> ,[object Object]
What does <ajax:enable> do? ,[object Object],[object Object],[object Object]
What requestHandlers are there? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
What requestHandlers are there? ,[object Object],[object Object],[object Object],[object Object]
What responseHandlers are there? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
What responseHandlers are there? ,[object Object],[object Object],[object Object],[object Object]
What responseHandlers are there? ,[object Object],[object Object],[object Object],[object Object],[object Object]
What responseHandlers are there? ,[object Object],[object Object]
Is that all there is to AjaxParts? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Is that all there is to AjaxParts? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Is that all there is to AjaxParts? ,[object Object],[object Object],[object Object],[object Object]
Other Struts 1 Ajax Resources ,[object Object],[object Object],[object Object],[object Object]
Retrofitting Struts ,[object Object],[object Object],[object Object],[object Object],[object Object]
Are there new alternatives for Struts 2? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
How do the S2 Ajax Tags work?  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
How do the S2 Ajax Tags work?  ,[object Object],[object Object],[object Object],[object Object]
How do the S2 Ajax Tags work?  ,[object Object],[object Object],[object Object],[object Object]
 
 
 
<%@  taglib  prefix = &quot;yui&quot;  uri = &quot;/struts-yui-tags&quot;  %> <%@  taglib  prefix = &quot;s&quot;  uri = &quot;/struts-tags&quot;  %> < html > < head > < yui:head  datepicker = &quot;true&quot;  /> </ head > < body > < p > The selected date is    < s:property  value = &quot;datepicker&quot; /></ p > < s:form  action = &quot;datepicker&quot; > < yui:datepicker  id = &quot;datepicker&quot;   name = &quot;datepicker&quot; /> < s:submit  /> </ s:form >   </ body > </ html > datepicker.jsp
< action  name = &quot;datepicker&quot;  class = &quot;actions.Datepicker&quot; > < result > datepicker.jsp </ result > </ action > struts.xml
public   class  Datepicker  extends  ActionSupport { private  Date  datepicker ; public  Date getDatepicker() { return   datepicker ; } public   void  setDatepicker(Date value) { datepicker  = value; } } actions.DatePicker.java
 
Are there other Struts 2  Ajax resources?  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Is that all there is? ,[object Object],[object Object],[object Object],[object Object]
JSON-P support in APT ,[object Object],[object Object],[object Object],[object Object],[object Object]
Struts University Series
1 of 83

More Related Content

What's hot(20)

Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
David Rodenas605 views
ORM InjectionORM Injection
ORM Injection
Simone Onofri11.2K views
Introduction into Struts2 jQuery Grid TagsIntroduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid Tags
Johannes Geppert14K views
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Dom
kaven yan2.7K views
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
Rodolfo Assis (Brute)7.8K views
JavaScript Best PraticesJavaScript Best Pratices
JavaScript Best Pratices
ChengHui Weng359 views
GKAC 2015 Apr. - RxAndroidGKAC 2015 Apr. - RxAndroid
GKAC 2015 Apr. - RxAndroid
GDG Korea2.1K views
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013
Laurent_VB3.2K views
Ajax PerformanceAjax Performance
Ajax Performance
kaven yan1.8K views
Server1Server1
Server1
FahriIrawan343 views
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
Visual Engineering2.8K views
Android dev toolboxAndroid dev toolbox
Android dev toolbox
Shem Magnezi3.1K views
Selectors and normalizing state shapeSelectors and normalizing state shape
Selectors and normalizing state shape
Muntasir Chowdhury164 views
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests
Tomek Kaczanowski1K views

Viewers also liked(6)

Considerations for Seismic RetrofittingConsiderations for Seismic Retrofitting
Considerations for Seismic Retrofitting
Natural Hazard Mitigation Association 1.1K views
Seismic retrofitting techniques of rccSeismic retrofitting techniques of rcc
Seismic retrofitting techniques of rcc
Korrapati Pratyusha10.1K views
Canal irrigationCanal irrigation
Canal irrigation
Pranamesh Chakraborty87.9K views
Seismic Retrofitting TechniquesSeismic Retrofitting Techniques
Seismic Retrofitting Techniques
Aritra Banerjee94.3K views

Similar to Retrofitting

Struts2Struts2
Struts2yuvalb
2.7K views45 slides
Introducing Struts 2Introducing Struts 2
Introducing Struts 2wiradikusuma
2.6K views25 slides
AjaxAjax
Ajaxdevisp
593 views19 slides

Similar to Retrofitting(20)

Struts2Struts2
Struts2
yuvalb2.7K views
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
wiradikusuma2.6K views
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
Matt Raible8.1K views
AjaxAjax
Ajax
devisp593 views
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
Matt Raible6.1K views
AJAX Workshop NotesAJAX Workshop Notes
AJAX Workshop Notes
Pamela Fox997 views
Ajax pptAjax ppt
Ajax ppt
Sanmuga Nathan2.5K views
Ajax PptAjax Ppt
Ajax Ppt
Hema Prasanth8.7K views
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
Doncho Minkov2K views
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
dasguptahirak7.6K views
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul755 views
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul757 views
J Query PresentationJ Query Presentation
J Query Presentation
Vishal Kumar2.3K views
Jquery 1Jquery 1
Jquery 1
Manish Kumar Singh816 views
Coding AjaxCoding Ajax
Coding Ajax
Ted Husted836 views
Interoperable Web Services with JAX-WSInteroperable Web Services with JAX-WS
Interoperable Web Services with JAX-WS
Carol McDonald4.9K views
Introduction to JQueryIntroduction to JQuery
Introduction to JQuery
MobME Technical1.1K views

More from Ted Husted(17)

Ship It!Ship It!
Ship It!
Ted Husted674 views
 .NET @ apache.org .NET @ apache.org
.NET @ apache.org
Ted Husted1.5K views
The secret life_of_open_sourceThe secret life_of_open_source
The secret life_of_open_source
Ted Husted533 views
NU  FaceBook 101 JCC 2010NU  FaceBook 101 JCC 2010
NU FaceBook 101 JCC 2010
Ted Husted742 views
Drupal kickstart-workshopDrupal kickstart-workshop
Drupal kickstart-workshop
Ted Husted1.3K views
Open source-secret-sauce-rit-2010Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010
Ted Husted401 views
Testing Web Application SecurityTesting Web Application Security
Testing Web Application Security
Ted Husted1.6K views
API Doc SmackdownAPI Doc Smackdown
API Doc Smackdown
Ted Husted1.5K views
Testing The TestersTesting The Testers
Testing The Testers
Ted Husted1.1K views
Testing Ajax ApplicationsTesting Ajax Applications
Testing Ajax Applications
Ted Husted1K views
Testing Ajax Web ApplicationsTesting Ajax Web Applications
Testing Ajax Web Applications
Ted Husted11.1K views
Testing ToolsTesting Tools
Testing Tools
Ted Husted2.8K views
Open Source Secret SauceOpen Source Secret Sauce
Open Source Secret Sauce
Ted Husted413 views

Recently uploaded(20)

Liqid: Composable CXL PreviewLiqid: Composable CXL Preview
Liqid: Composable CXL Preview
CXL Forum118 views
Java Platform Approach 1.0 - Picnic MeetupJava Platform Approach 1.0 - Picnic Meetup
Java Platform Approach 1.0 - Picnic Meetup
Rick Ossendrijver23 views
ThroughputThroughput
Throughput
Moisés Armani Ramírez28 views
Web Dev - 1 PPT.pdfWeb Dev - 1 PPT.pdf
Web Dev - 1 PPT.pdf
gdsczhcet48 views
METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
METHOD AND SYSTEM FOR PREDICTING OPTIMAL LOAD FOR WHICH THE YIELD IS MAXIMUM ...
Prity Khastgir IPR Strategic India Patent Attorney Amplify Innovation23 views

Retrofitting

  • 1.
  • 2. Struts on Ajax: Retrofitting Struts with Ajax Taglibs Square One University Series
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. public class IndexResult extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType( &quot;text/html&quot; ); PrintWriter out = response.getWriter(); out.println( &quot;Hello World! “ + “ This is an AJAX response “ + “ from a Struts Action.&quot; ); out.flush(); return null ; } } actions.IndexResult.java
  • 13. public class IndexResult2 extends ActionSupport { private InputStream inputStream ; public InputStream getInputStream() { return inputStream ; } public String execute() throws Exception { inputStream = new StringBufferInputStream( &quot;Hello World! This is an AJAX response &quot; + &quot;from a Struts 2 Action.&quot; ); return SUCCESS ; } } actions.IndexResult2.java
  • 14.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. < html > < head > < title > Simple Hello World Example </ title > </ head > < body > < input id = &quot;hello-button&quot; type = &quot;button&quot; value = &quot;Say Hello World via AJAX&quot; /> < br />< br /> < div id = &quot;hello-div&quot; ></ div > </ body > </ html > index.jsp
  • 33. <%@ taglib prefix = &quot;ajax&quot; uri = &quot;javawebparts/ajaxparts/taglib&quot; %> < html > < head > < title > Simple Hello World Example </ title > </ head > < body > < input id = &quot;hello-button&quot; type = &quot;button&quot; value = &quot;Say Hello World via AJAX&quot; /> < ajax:event attachTo = &quot;hello-button&quot; ajaxRef = &quot;index/hello-button&quot; /> < br />< br /> < div id = &quot;hello-div&quot; ></ div > < ajax:enable /> </ body > </ html > index.jsp
  • 34. ajax-config.xml < ajaxConfig > < group ajaxRef = &quot;index&quot; > < element ajaxRef = &quot;hello-button&quot; > < event type = &quot;onclick&quot; > < requestHandler type = &quot;std:SimpleRequest&quot; target = &quot; index-result.txt &quot; > < parameter /> </ requestHandler > < responseHandler type = &quot;std:InnerHTML&quot; > < parameter > hello-div </ parameter > </ responseHandler > </ event > </ element > </ group > </ ajaxConfig >
  • 35. Hello World! I am an AJAX result from the (mock) server. index-result.txt
  • 36. <web-app> <context-param> <param-name> AjaxPartsTaglibConfig </param-name> <param-value> /WEB-INF/ajax-config.xml </param-value> </context-param> <context-param> <param-name> AjaxPartsTaglibValidateConfig </param-name> <param-value> false </param-value> </context-param> web.xml
  • 37.
  • 38.  
  • 39.  
  • 40.
  • 41. public class IndexResult extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType( &quot;text/html&quot; ); PrintWriter out = response.getWriter(); out.println( &quot;Hello World! “ + “ This is an AJAX response “ + “ from a Struts Action.&quot; ); out.flush(); return null ; } } actions.IndexResult.java
  • 42. < action path = &quot;/index-result&quot; type = &quot;actions.IndexResult&quot; validate = &quot;false&quot; /> struts-config.xml
  • 43. <requestHandler type=&quot;std:SimpleRequest&quot; target=&quot;index-result.txt&quot;> < requestHandler type = &quot;std:SimpleRequest&quot; target = &quot;/index-result.do&quot; > ajax-config.xml
  • 44.  
  • 45.
  • 46. public class IndexResult2 extends ActionSupport { private InputStream inputStream ; public InputStream getInputStream() { return inputStream ; } public String execute() throws Exception { inputStream = new StringBufferInputStream( &quot;Hello World! This is an AJAX response &quot; + &quot;from a Struts 2 Action.&quot; ); return SUCCESS ; } } actions.IndexResult2.java
  • 47. < package name = &quot;ajaxwebparts&quot; extends = &quot;struts-default&quot; > < action name = &quot;index-result&quot; class = &quot;actions.IndexResult2&quot; > < result type = &quot;stream&quot; > < param name = &quot;contentType&quot; > text/html </ param > < param name = &quot;inputName&quot; > inputStream </ param > </ result > </ action > </ package > struts.xml
  • 48. <requestHandler type=&quot;std:SimpleRequest&quot; target=&quot;/index-result.do&quot;> < requestHandler type = &quot;std:SimpleRequest&quot; target = &quot;/index-result.action&quot; > ajax-config.xml
  • 49.  
  • 50.
  • 51.
  • 52.
  • 53. < ajaxConfig > < group ajaxRef = &quot; index &quot; > < element ajaxRef = &quot; hello-button &quot; > < event type = &quot;onclick&quot; > < requestHandler type = &quot;std:SimpleRequest&quot; target = &quot; index-result.action &quot; > < parameter /> How does AjaxParts work? <body> < input id = &quot;hello-button&quot; type = &quot;button&quot; value = &quot;Say Hello World via AJAX&quot; /> < ajax:event attachTo = &quot;hello-button“ ajaxRef = &quot; index/hello-button &quot; />
  • 54. < responseHandler type = &quot;std:InnerHTML&quot; > < parameter > hello-div </ parameter > </ responseHandler > < br />< br /> < div id = &quot; hello-div &quot; ></ div > </ body > < ajax:enable /> How does AjaxParts work?
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.  
  • 74.  
  • 75.  
  • 76. <%@ taglib prefix = &quot;yui&quot; uri = &quot;/struts-yui-tags&quot; %> <%@ taglib prefix = &quot;s&quot; uri = &quot;/struts-tags&quot; %> < html > < head > < yui:head datepicker = &quot;true&quot; /> </ head > < body > < p > The selected date is < s:property value = &quot;datepicker&quot; /></ p > < s:form action = &quot;datepicker&quot; > < yui:datepicker id = &quot;datepicker&quot; name = &quot;datepicker&quot; /> < s:submit /> </ s:form > </ body > </ html > datepicker.jsp
  • 77. < action name = &quot;datepicker&quot; class = &quot;actions.Datepicker&quot; > < result > datepicker.jsp </ result > </ action > struts.xml
  • 78. public class Datepicker extends ActionSupport { private Date datepicker ; public Date getDatepicker() { return datepicker ; } public void setDatepicker(Date value) { datepicker = value; } } actions.DatePicker.java
  • 79.  
  • 80.
  • 81.
  • 82.