Struts2系列—Form Tags(datetimepicker)

中…… Struts2系列—Form Tags(datetimepicker)

 

http://www.blogjava.net/kalman03/archive/2008/10/30/237554.html 

网络上关于Struts2方面资料不少,之所以再重复一些关于Struts2的知识,只是因为本人正在学习Struts2,而且在学习的途中也遇见了不少的问题,由于没有学过Struts2以前的版本,学习途中也是比较的痛苦,在此仅想记录下我的学习历程。
     如果你对这个方面有深入研究,恳请你的指点;如果你也是初学者,希望这系列的文章对你有所帮助。

     Struts2中的datetimepicker是一个时间选择器,个人觉得是一个非常方便的标签,我们知道用JavaScript代码实现一个日期选择器那要写好长以段代码,而Struts2内置的这个datetimepicker标签却帮我们摆脱了长长的JavaScript的噩梦。来看一下就知道了:

datetimepicker.jsp:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <% @ page language = " java "  import = " java.util.* "  pageEncoding = " UTF-8 " %>
<% @ taglib prefix = " s "  uri = " /struts-tags " %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
    
< s:head  theme ="simple" />
    
<!--  上面这个head标签必须要加,至于设置哪种主题没有限制,根据自己开发的需要  -->
    
<!--  当没有加的时候就没有显示,这是为什么?我学习的时候不懂,谁看到了帮我解释下  -->
    
< body >
        
< s:datetimepicker  value ="today"  name ="getdate"  label ="时间选择器" ></ s:datetimepicker >
    
</ body >
</ html >

可以看到很漂亮的效果:


当然我们可以格式化日期格式,一些其他的处理可以根据需要在action里面进行处理。来看一个初始化时间为2008-08-08,按照年月日显示的日期选择器:
增加下列代码到上面的JSP里面:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < s:datetimepicker  name ="hopedate"  label ="year-month-date" displayFormat ="yyyy-MM-dd"   />

增加一个DatetimepickerAction.java:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package  com.kalman03.action;

import  java.util.Date;

import  com.opensymphony.xwork2.ActionSupport;

/**
 *@FileName DatetimepickerAction.java
 *
 *@Author kalman03 
 *
 
*/
public   class  DatetimepickerAction  extends  ActionSupport {

    
private  Date hopedate;
    
public  Date getHopedate() {
        
return  hopedate;
    }
    
public   void  setHopedate(Date hopedate) {
        
this .hopedate  =  hopedate;
    }
    @Override
    
public  String execute()  throws  Exception {
        
this .setHopedate( new  Date( " Aug 08,2008 12:00:00 AM " ));
        
return  SUCCESS;
    }
}

配置struts.xml里面的映射关系:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < action  name ="datetimepickertag"  class ="com.kalman03.action.DatetimepickerAction" >
  
< result > /datetimepicker.jsp </ result >
</ action >

到此结束可以在浏览器输入:http://localhost:8080/test/datetimepickertag.action得到格式化后的效果:


我对Struts2的这个标签无语,太强了,有时间好好看看内部是怎么处理的。在这个我再提供给大家一个JavaScript实现的日期选择器,需要声明的是这个JavaScript摘自 kimsoft-jscalendar
js源码(支持IE,Firefox,Safari,Opera,谷歌等多浏览器):

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <!--
/* *
 * Calendar
 * @param   beginYear           1990
 * @param   endYear             2010
 * @param   language            0(zh_cn)|1(en_us)|2(en_en)|3(zh_tw)
 * @param   patternDelimiter    "-"
 * @param   date2StringPattern  "yyyy-MM-dd"
 * @param   string2DatePattern  "ymd"
 * @version 1.0 build 2006-04-01
 * @version 1.1 build 2006-12-17
 * @author  KimSoft (jinqinghua [at] gmail.com)
 * NOTE!    you can use it free, but keep the copyright please
 * IMPORTANT:you must include this script file inner html body elment 
 * @see http://code.google.com/p/kimsoft-jscalendar/
 
*/
function  Calendar(beginYear, endYear, language, patternDelimiter, date2StringPattern, string2DatePattern) {
    
this .beginYear  =  beginYear  ||   1990 ;
    
this .endYear    =  endYear    ||   2020 ;
    
this .language   =  language   ||   0 ;
    
this .patternDelimiter  =  patternDelimiter      ||   " - " ;
    
this .date2StringPattern  =  date2StringPattern  ||  Calendar.language[ " date2StringPattern " ][ this .language].replace( / \ -/ g,  this .patternDelimiter);
    
this .string2DatePattern  =  string2DatePattern  ||  Calendar.language[ " string2DatePattern " ][ this .language];
    
    
this .dateControl  =   null ;
    
this .panel   =   this .getElementById( " __calendarPanel " );
    
this .iframe  =  window.frames[ " __calendarIframe " ];
    
this .form    =   null ;
    
    
this .date  =   new  Date();
    
this .year  =   this .date.getFullYear();
    
this .month  =   this .date.getMonth();
    
    
this .colors  =  { " bg_cur_day " : " #00CC33 " , " bg_over " : " #EFEFEF " , " bg_out " : " #FFCC00 " }
};

Calendar.language 
=  {
    
" year "    : [ " \u5e74 " "" "" " \u5e74 " ],
    
" months "  : [
                [
" \u4e00\u6708 " , " \u4e8c\u6708 " , " \u4e09\u6708 " , " \u56db\u6708 " , " \u4e94\u6708 " , " \u516d\u6708 " , " \u4e03\u6708 " , " \u516b\u6708 " , " \u4e5d\u6708 " , " \u5341\u6708 " , " \u5341\u4e00\u6708 " , " \u5341\u4e8c\u6708 " ],
                [
" JAN " , " FEB " , " MAR " , " APR " , " MAY " , " JUN " , " JUL " , " AUG " , " SEP " , " OCT " , " NOV " , " DEC " ],
                [
" JAN " , " FEB " , " MAR " , " APR " , " MAY " , " JUN " , " JUL " , " AUG " , " SEP " , " OCT " , " NOV " , " DEC " ],
                [
" \u4e00\u6708 " , " \u4e8c\u6708 " , " \u4e09\u6708 " , " \u56db\u6708 " , " \u4e94\u6708 " , " \u516d\u6708 " , " \u4e03\u6708 " , " \u516b\u6708 " , " \u4e5d\u6708 " , " \u5341\u6708 " , " \u5341\u4e00\u6708 " , " \u5341\u4e8c\u6708 " ]
                ],
    
" weeks "   : [[ " \u65e5 " , " \u4e00 " , " \u4e8c " , " \u4e09 " , " \u56db " , " \u4e94 " , " \u516d " ],
                [
" Sun " , " Mon " , " Tur " , " Wed " , " Thu " , " Fri " , " Sat " ],
                [
" Sun " , " Mon " , " Tur " , " Wed " , " Thu " , " Fri " , " Sat " ],
                [
" \u65e5 " , " \u4e00 " , " \u4e8c " , " \u4e09 " , " \u56db " , " \u4e94 " , " \u516d " ]
        ],
    
" clear "   : [ " \u6e05\u7a7a " " Clear " " Clear " " \u6e05\u7a7a " ],
    
" today "   : [ " \u4eca\u5929 " " Today " " Today " " \u4eca\u5929 " ],
    
" close "   : [ " \u5173\u95ed " " Close " " Close " " \u95dc\u9589 " ],
    
" date2StringPattern "  : [ " yyyy-MM-dd " " yyyy-MM-dd " " yyyy-MM-dd " " yyyy-MM-dd " ],
    
" string2DatePattern "  : [ " ymd " , " ymd " " ymd " " ymd " ]
};

Calendar.prototype.draw 
=   function () {
    calendar 
=   this ;
    
    
var  _cs  =  [];
    _cs[_cs.length] 
=  ' < form id = " __calendarForm "  name = " __calendarForm "  method = " post " > ';
    _cs[_cs.length] 
=  ' < table id = " __calendarTable "  width = " 100% "  border = " 0 "  cellpadding = " 3 "  cellspacing = " 1 "
align
= " center " > ';
    _cs[_cs.length] 
=  '  < tr > ';
    _cs[_cs.length] 
=  '   < th >< input class = " l "  name = " goPrevMonthButton "  type = " button "  id = " goPrevMonthButton "
 value
= " &lt; "  \ />< \ / th > ';
    _cs[_cs.length] 
=  '   < th colspan = " 5 " >< select class = " year "  name = " yearSelect "  id = " yearSelect " >< \ / select >< select class = " month "  name = " monthSelect "  id = " monthSelect " >< \ / select >< \ / th > ';
    _cs[_cs.length] 
=  '   < th >< input class = " r "  name = " goNextMonthButton "  type = " button "  id = " goNextMonthButton "
value
= " &gt; "  \ />< \ / th > ';
    _cs[_cs.length] 
=  '  < \ / tr > ';
    _cs[_cs.length] 
=  '  < tr > ';
    
for ( var  i  =   0 ; i  <   7 ; i ++ ) {
        _cs[_cs.length] 
=  ' < th class = " theader " > ';
        _cs[_cs.length] 
=  Calendar.language[ " weeks " ][ this .language][i];
        _cs[_cs.length] 
=  ' < \ / th > ';    
    }
    _cs[_cs.length] 
=  ' < \ / tr > ';
    
for ( var  i  =   0 ; i  <   6 ; i ++ ){
        _cs[_cs.length] 
=  ' < tr align = " center " > ';
        
for ( var  j  =   0 ; j  <   7 ; j ++ ) {
            
switch  (j) {
                
case   0 : _cs[_cs.length]  =  ' < td class = " sun " >& nbsp; < \ / td > ';  break ;
                
case   6 : _cs[_cs.length]  =  ' < td class = " sat " >& nbsp; < \ / td > ';  break ;
                
default :_cs[_cs.length]  =  ' < td class = " normal " >& nbsp; < \ / td > ';  break ;
            }
        }
        _cs[_cs.length] 
=  ' < \ / tr > ';
    }
    _cs[_cs.length] 
=  '  < tr > ';
    _cs[_cs.length] 
=  '   < th colspan = " 2 " >< input type = " button "  class = " b "  name = " clearButton "  id = " clearButton "  \ />< \ / th > ';
    _cs[_cs.length] 
=  '   < th colspan = " 3 " >< input type = " button "  class = " b "  name = " selectTodayButton "  id = " selectTodayButton "  \ />< \ / th > ';
    _cs[_cs.length] 
=  '   < th colspan = " 2 " >< input type = " button "  class = " b "  name = " closeButton "  id = " closeButton "  \ />< \ / th > ';
    _cs[_cs.length] 
=  '  < \ / tr > ';
    _cs[_cs.length] 
=  ' < \ / table > ';
    _cs[_cs.length] 
=  ' < \ / form > ';
    
    
this .iframe.document.body.innerHTML  =  _cs.join( "" );
    
this .form  =   this .iframe.document.forms[ " __calendarForm " ];

    
this .form.clearButton.value  =  Calendar.language[ " clear " ][ this .language];
    
this .form.selectTodayButton.value  =  Calendar.language[ " today " ][ this .language];
    
this .form.closeButton.value  =  Calendar.language[ " close " ][ this .language];
    
    
this .form.goPrevMonthButton.onclick  =   function  () {calendar.goPrevMonth( this );}
    
this .form.goNextMonthButton.onclick  =   function  () {calendar.goNextMonth( this );}
    
this .form.yearSelect.onchange  =   function  () {calendar.update( this );}
    
this .form.monthSelect.onchange  =   function  () {calendar.update( this );}
    
    
this .form.clearButton.onclick  =   function  () {calendar.dateControl.value  =   "" ;calendar.hide();}
    
this .form.closeButton.onclick  =   function  () {calendar.hide();}
    
this .form.selectTodayButton.onclick  =   function  () {
        
var  today  =   new  Date();
        calendar.date 
=  today;
        calendar.year 
=  today.getFullYear();
        calendar.month 
=  today.getMonth();
        calendar.dateControl.value 
=  today.format(calendar.date2StringPattern);
        calendar.hide();
    }
};

Calendar.prototype.bindYear 
=   function () {
    
var  ys  =   this .form.yearSelect;
    ys.length 
=   0 ;
    
for  ( var  i  =   this .beginYear; i  <=   this .endYear; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值