Author: musachy
Date: Mon Mar  9 22:22:29 2009
New Revision: 751881

URL: http://svn.apache.org/viewvc?rev=751881&view=rev
Log:
improve datepicker

Modified:
    
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
    
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl

Modified: 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java?rev=751881&r1=751880&r2=751881&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
 (original)
+++ 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
 Mon Mar  9 22:22:29 2009
@@ -44,12 +44,12 @@
         description = "Renders a date picker",
         allowDynamicAttributes = true)
 public class JQueryDatepicker extends JQueryTextField {
-     final protected static Logger LOG = 
LoggerFactory.getLogger(JQueryDatepicker.class);
+    final protected static Logger LOG = 
LoggerFactory.getLogger(JQueryDatepicker.class);
 
     private static final String TEMPLATE = "datepicker";
     final private static String RFC3339_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
     final private static String RFC3339_PATTERN = "{0,date," + RFC3339_FORMAT 
+ "}";
-    
+
     //see http://docs.jquery.com/UI/Datepicker/%24.datepicker.formatDate
     private String displayFormat;
 
@@ -63,30 +63,46 @@
 
         if (displayFormat != null)
             addParameter("displayFormat", findString(displayFormat));
+        else
+            addParameter("displayFormat", "yy-mm-dd");
 
-        if(parameters.containsKey("value")) {
-            addParameter("nameValue", parameters.get("value"));
-        } else {
-            if(parameters.containsKey("name")) {
-                addParameter("nameValue", 
format(findValue((String)parameters.get("name"))));
+        Object currentValue = null;
+        if (parameters.containsKey("value")) {
+            addParameter("displayValue", parameters.get("value"));
+            currentValue = parameters.get("value");
+        } else if (parameters.containsKey("name")) {
+            currentValue = findValue((String) parameters.get("name"));
+        }
+
+        if (currentValue != null) {
+            Date date = getDate(currentValue);
+            if (date != null) {
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(date);
+                String formattedDate = MessageFormat.format(RFC3339_PATTERN, 
date);
+                addParameter("nameValue", formattedDate);
+                addParameter("year", calendar.get(Calendar.YEAR));
+                addParameter("day", calendar.get(Calendar.DAY_OF_MONTH));
+                addParameter("month", calendar.get(Calendar.MONTH));
             }
         }
     }
 
-    private String format(Object obj) {
-        if(obj == null)
+    private Date getDate(Object obj) {
+        SimpleDateFormat simpleDisplayFormat = new 
SimpleDateFormat(displayFormat);
+        if (obj == null)
             return null;
 
-        if(obj instanceof Date) {
-            return MessageFormat.format(RFC3339_PATTERN, (Date) obj);
-        } else if(obj instanceof Calendar) {
-            return MessageFormat.format(RFC3339_PATTERN, ((Calendar) 
obj).getTime());
-        }
-        else {
+        if (obj instanceof Date) {
+            return (Date) obj;
+        } else if (obj instanceof Calendar) {
+            return ((Calendar) obj).getTime();
+        } else {
             // try to parse a date
             String dateStr = obj.toString();
-            if(dateStr.equalsIgnoreCase("today"))
-                return MessageFormat.format(RFC3339_PATTERN, new Date());
+            if (dateStr.equalsIgnoreCase("today")) {
+                return new Date();
+            }
 
 
             Date date = null;
@@ -101,7 +117,7 @@
             if (this.displayFormat != null) {
                 try {
                     SimpleDateFormat displayFormat = new SimpleDateFormat(
-                        (String) getParameters().get("displayFormat"));
+                            (String) getParameters().get("displayFormat"));
                     formats.add(displayFormat);
                 } catch (Exception e) {
                 }
@@ -111,16 +127,16 @@
                 try {
                     date = format.parse(dateStr);
                     if (date != null)
-                        return MessageFormat.format(RFC3339_PATTERN, date);
+                        return date;
                 } catch (Exception e) {
                     //keep going
                 }
             }
 
-           // last resource, assume already in correct/default format
-           if (LOG.isDebugEnabled())
-               LOG.debug("Unable to parse date " + dateStr);
-           return dateStr;
+            // last resource, assume already in correct/default format
+            if (LOG.isDebugEnabled())
+                LOG.debug("Unable to parse date " + dateStr);
+            return null;
         }
     }
 

Modified: 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl?rev=751881&r1=751880&r2=751881&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
 (original)
+++ 
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
 Mon Mar  9 22:22:29 2009
@@ -28,8 +28,8 @@
 <#if parameters.maxlength??>
  maxlength="${parameters.maxlength?html}"<#rt/>
 </#if>
-<#if parameters.nameValue??>
- value="<@s.property value="parameters.nameValue"/>"<#rt/>
+<#if parameters.displayValue??>
+ value="<@s.property value="parameters.displayValue"/>"<#rt/>
 </#if>
 <#if parameters.disabled?default(false)>
  disabled="disabled"<#rt/>
@@ -51,15 +51,20 @@
 <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
 <#include "/${parameters.templateDir}/simple/dynamic-attributes.ftl" />
 />
-<input type="text" name="${parameters.name?default("")?html}" 
id="${parameters.id?html}_hidden" />
+<input type="text" name="${parameters.name?default("")?html}" 
id="${parameters.id?html}_hidden"
+<#if parameters.nameValue??>
+value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+/>
 <script type="text/javascript">
     $(function() {
         $("#${parameters.id?html}").datepicker({
             altField: "#${parameters.id?html}_hidden",
-            altFormat: "yy-mm-dd'T'00:00:00"
-            <#if parameters.displayFormat??>
-            ,dateFormat : "${parameters.displayFormat?html}"
-            </#if>
+            altFormat: "yy-mm-dd'T'00:00:00",
+            dateFormat : "${parameters.displayFormat?html}"
         });
+        <#if parameters.year?? && parameters.month?? && parameters.day??>
+        
$("#${parameters.id?html}").val($.datepicker.formatDate("${parameters.displayFormat?html}",
 new Date(${parameters.year?c}, ${parameters.month}, ${parameters.day})));
+        </#if>
     });
 </script>
\ No newline at end of file


Reply via email to