最近研究struts时,发现这个标签能够解决很多格式上的问题,所以在网上搜索了一下这个内容,发现这篇文章写得挺不错的,挺有收获。
struts 标签 :<s:date/>
作用:用来格式化显示日期的格式。
它可以用一种你指定的格式来显示(如:“yyyy-MM-dd”),可以生成通俗易懂的注释(如:in 2 hours,14 minutes),或者用预先定义的一个格式来显示(如在properties配置文件中配置'struts.date.format').如果没有找到这个struts.date.format,则会找默认的DateFormat.MEDIUM来格式化你的日期对象。当然如果在值栈中没有找你对应的日期对象,则会返回空格。
可配置的标签属性有:
name
nice
format
1 nice属性为true
i18n key | default |
struts.date.format.past | {0} ago |
struts.date.format.future | in {0} |
struts.date.format.seconds | an instant |
struts.date.format.minutes | {0,choice,1#one minute|1<{0} minutes} |
struts.date.format.hours | {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes} |
struts.date.format.days | {0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours} |
struts.date.format.years | {0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1<, {1} days |
2.nice属性为false,format属性指定的格式如:dd/MM/yyyy
在这种情况下,format属性将被使用。
3 nice属性为false,format属性没有指定
i18n key | default |
struts.date.format | if one is not found DateFormat.MEDIUM format will be used |
参数
Name |
Required |
Default |
Evaluated |
Type |
Description |
---|---|---|---|---|---|
format | false | false | String | 日 期格式 | |
id | false | true | String | 与普通html的id一样 | |
name | true | true | String | 日 期的值 | |
nice | false | false | true | Boolean | 是否打印出更nicely的格式 |
例子:
<s:date name="person.birthday" format="dd/MM/yyyy" />
<s:date name="person.birthday" format="%{getText('some.i18n.key')}" />
<s:date name="person.birthday" nice="true" />
<s:date name="person.birthday" />
问题1:
<s:date name="model.createDate" format="yyyy-mm-dd"/>老是将日期显示错误,比如数据库里明明是2009-03-30,显示就成了2009-30-31。
解决:应该多看看API。
字母 |
日期或时间元素 |
表示 |
示例 |
---|---|---|---|
G |
Era 标志符 |
Text |
de>ADde> |
y |
年 |
Year |
de>1996de>; de>96de> |
M |
年中的月份 |
Month |
de>Julyde>; de>Julde>; de>07de> |
w |
年中的周数 |
Number |
de>27de> |
W |
月份中的周数 |
Number |
de>2de> |
D |
年中的天数 |
Number |
de>189de> |
d |
月份中的天数 |
Number |
de>10de> |
F |
月份中的星期 |
Number |
de>2de> |
E |
星期中的天数 |
Text |
de>Tuesdayde>; de>Tuede> |
a |
Am/pm 标记 |
Text |
de>PMde> |
H |
一天中的小时数(0-23) |
Number |
de>0de> |
k> |
一天中的小时数 (1-24) |
Number |
de>24de> |
K |
am/pm 中的小时数(0-11) |
Number |
de>0de> |
h |
am/pm 中的小时数(1-12) |
Number |
de>12de> |
m |
小时中的分钟数 |
Number |
de>30de> |
s |
分钟中的秒数 |
Number |
de>55de> |
S |
毫秒数 |
Number |
de>978de> |
z |
时区 |
General time zone |
de>Pacific Standard Timede>; de>PSTde>; de>GMT-08:00de> |
Z |
时区 |
RFC 822 time zone |
de>-0800de> |
当然,数据的日期格式又是另外一回事了,有时我也总会将HH24:mm:ss写成数据库的HH24:mi:ss.有时候写的导数可能也会出现日期格式的问题,因为与数据库的格式不一样而出来导入错误。还在操作数据库的时候可能也会有日期格式的困扰,如果用oracle的话,如果你写的正确的日期格式,用String也可以的。Oracle的to_date函数可以将de>CHARde>, de>VARCHAR2de>, de>NCHARde>, or de>NVARCHAR2de> 类型数据转换成de>DATEde>数据类型的值.
如果不指定格式,则会用默认的格式。默认的格式包为:de>NLS_TERRITORYde> 。更多的信息应该参考Oracle的文档了。
请问Struts2的s:date标签在action中一定要为date类型吗?
private Date currentDate; ...... 如果不是,请问long,String,Integer如何用<s:date name ="currentDate" formate =""yyyy-MM-dd"/>
回答:
s:date标签使用时,一定要是Date类型。
String型,数值型等其他类型,可以用以下方法: 先在resource文件中定义如下:
format.date_medium={0,date,medium}
format.date_ymd={0,date,yyyy/MM/dd}
format.date_time={0,date,yyyy/MM/dd hh:mm}
format.number_money={0,number,#,##0}
然后就可以自由的format了:
<s:text name="format.number_money">
<s:param name="value" value="salesPrice"/> </s:text>
<s:text name="format.date_ymd">
<s:param name="value" value="salesDate"/></s:text>
原帖地址:http://blog.sina.com.cn/s/blog_4dacfb010100vhqk.html