Author: musachy
Date: Mon Mar 9 21:13:18 2009
New Revision: 751841
URL: http://svn.apache.org/viewvc?rev=751841&view=rev
Log:
Add datepicker
Added:
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/views/jsp/ui/JQueryDatepickerTag.java
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
Modified:
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/head.ftl
Added:
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=751841&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
(added)
+++
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryDatepicker.java
Mon Mar 9 21:13:18 2009
@@ -0,0 +1,141 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.jquery.components;
+
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import org.apache.struts2.jquery.JQueryPluginConstants;
+import org.apache.struts2.views.annotations.StrutsTag;
+import org.apache.struts2.views.annotations.StrutsTagAttribute;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+...@strutstag(
+ name = "datepicker",
+ tldTagClass =
"org.apache.struts2.jquery.views.jsp.ui.JQueryDatepickerTag",
+ description = "Renders a date picker",
+ allowDynamicAttributes = true)
+public class JQueryDatepicker extends JQueryTextField {
+ 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;
+
+ public JQueryDatepicker(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
+ super(stack, request, response);
+ }
+
+ @Override
+ public void evaluateParams() {
+ super.evaluateParams();
+
+ if (displayFormat != null)
+ addParameter("displayFormat", findString(displayFormat));
+
+ if(parameters.containsKey("value")) {
+ addParameter("nameValue", parameters.get("value"));
+ } else {
+ if(parameters.containsKey("name")) {
+ addParameter("nameValue",
format(findValue((String)parameters.get("name"))));
+ }
+ }
+ }
+
+ private String format(Object obj) {
+ 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 {
+ // try to parse a date
+ String dateStr = obj.toString();
+ if(dateStr.equalsIgnoreCase("today"))
+ return MessageFormat.format(RFC3339_PATTERN, new Date());
+
+
+ Date date = null;
+ //formats used to parse the date
+ List<DateFormat> formats = new ArrayList<DateFormat>();
+ formats.add(new SimpleDateFormat(RFC3339_FORMAT));
+ formats.add(SimpleDateFormat.getTimeInstance(DateFormat.SHORT));
+ formats.add(SimpleDateFormat.getDateInstance(DateFormat.SHORT));
+ formats.add(SimpleDateFormat.getDateInstance(DateFormat.MEDIUM));
+ formats.add(SimpleDateFormat.getDateInstance(DateFormat.FULL));
+ formats.add(SimpleDateFormat.getDateInstance(DateFormat.LONG));
+ if (this.displayFormat != null) {
+ try {
+ SimpleDateFormat displayFormat = new SimpleDateFormat(
+ (String) getParameters().get("displayFormat"));
+ formats.add(displayFormat);
+ } catch (Exception e) {
+ }
+ }
+
+ for (DateFormat format : formats) {
+ try {
+ date = format.parse(dateStr);
+ if (date != null)
+ return MessageFormat.format(RFC3339_PATTERN, 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;
+ }
+ }
+
+ protected String getDefaultTemplate() {
+ return TEMPLATE;
+ }
+
+ @Override
+ @Inject(JQueryPluginConstants.DEFAULT_THEME)
+ public void setDefaultUITheme(String theme) {
+ this.defaultUITheme = theme;
+ }
+
+ @StrutsTagAttribute(description = "Format use to display the selected
date", defaultValue = "mm/dd/yy")
+ public void setDisplayFormat(String displayFormat) {
+ this.displayFormat = displayFormat;
+ }
+}
Added:
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/views/jsp/ui/JQueryDatepickerTag.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/views/jsp/ui/JQueryDatepickerTag.java?rev=751841&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/views/jsp/ui/JQueryDatepickerTag.java
(added)
+++
struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/views/jsp/ui/JQueryDatepickerTag.java
Mon Mar 9 21:13:18 2009
@@ -0,0 +1,47 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.jquery.views.jsp.ui;
+
+import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.components.Component;
+import org.apache.struts2.jquery.components.JQueryDatepicker;
+import org.apache.struts2.views.jsp.ui.AbstractUITag;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class JQueryDatepickerTag extends JQueryTextFieldTag {
+ private String displayFormat;
+
+ public Component getBean(ValueStack stack, HttpServletRequest req,
HttpServletResponse res) {
+ return new JQueryDatepicker(stack, req, res);
+ }
+
+ protected void populateParams() {
+ super.populateParams();
+ JQueryDatepicker picker = ((JQueryDatepicker) component);
+ picker.setDisplayFormat(displayFormat);
+ }
+
+ public void setDisplayFormat(String displayFormat) {
+ this.displayFormat = displayFormat;
+ }
+}
Added:
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=751841&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
(added)
+++
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/datepicker.ftl
Mon Mar 9 21:13:18 2009
@@ -0,0 +1,65 @@
+<#--
+/*
+ * $Id: text.ftl 590812 2007-10-31 20:32:54Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<input type="text"<#rt/>
+ name="struts.${parameters.name?default("")?html}"<#rt/>
+<#if parameters.get("size")??>
+ size="${parameters.get("size")?html}"<#rt/>
+</#if>
+<#if parameters.maxlength??>
+ maxlength="${parameters.maxlength?html}"<#rt/>
+</#if>
+<#if parameters.nameValue??>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
+</#if>
+<#if parameters.disabled?default(false)>
+ disabled="disabled"<#rt/>
+</#if>
+<#if parameters.readonly?default(false)>
+ readonly="readonly"<#rt/>
+</#if>
+<#if parameters.tabindex??>
+ tabindex="${parameters.tabindex?html}"<#rt/>
+</#if>
+<#if parameters.id??>
+ id="${parameters.id?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/simple/css.ftl" />
+<#if parameters.title??>
+ title="${parameters.title?html}"<#rt/>
+</#if>
+<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
+<#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" />
+<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>
+ });
+ });
+</script>
\ No newline at end of file
Modified:
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/head.ftl
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/head.ftl?rev=751841&r1=751840&r2=751841&view=diff
==============================================================================
---
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/head.ftl
(original)
+++
struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery-simple/head.ftl
Mon Mar 9 21:13:18 2009
@@ -23,3 +23,6 @@
<script src="${base}/struts/jqueryUtils.js" type="text/javascript"></script>
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"
type="text/javascript"></script>
+<script src="http://jqueryui.com/latest/ui/ui.core.js"
type="text/javascript"></script>
+<script src="http://jqueryui.com/latest/ui/ui.datepicker.js"
type="text/javascript"></script>
+