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