今天瀏覽WW的Wiki,結果無意發現ww:date標簽的用法,撓頭一想以前沒有見過呀,仔細一看原來是2006/3/21才加上的。
會頭看看項目發現用的ww 2.2.1中沒有這個標簽,心想是不是發布新版本了?
果不出所料!發現OPENSYMPHONY已經發布2.2.2了。
不過2.2.2是在Opensymphony下的最后一個版本了,以后的版本就會以Struts Action 2.0的形式發布了,而后者今年8月才發布,中間的日子估計只能靠nightly build了。
說說變化,發現增加了RichTextEditor,經考察就是我們熟悉的FCK Editor。發現還增加了nifty corners,這是一個不用images的圓角容器(css+js),估計用在了某個theme里面。還有J2SE5的支持也更加完善,現在已經可以支持泛型Collection的反射(無需-conversion文件了),還支持annotation風格的validation聲名(如此像Stripes那樣的Web框架就沒什么可吹噓的了)。其它的變化請參考他們的ReleaseNotes。
http://www.opensymphony.com/webwork/wikidocs/Release%20Notes.html
說說新添加的ww:date標簽。很多朋友可能都認為ww:property輸出date比較不如意,以前很多解決方案感覺都不夠靈活。WW肯定察覺了,新增加的ww:date把玩了一下發現非常好用,所以推薦給大家。
語法非常簡單:
name:你取值的ognl表達式
nice:是否使用易讀(readable notations)的模式,其實就是類似conflunce里面顯示時間的方式,類似“in 2 hours, 14 minutes”
format:就是我們常用的時間format,例如“yyyy-MM-dd hh:mm”
id:就是HTML中的元素id
使用起來如下,官方的例子:
<ww:date name="person.birthday" format="dd/MM/yyyy" />
按照“dd/MM/yyyy”格式顯示
<ww:date name="person.birthday" format="%{getText('some.i18n.key')}" />
將format定義到i18n文件中的方式,這個很常用:D
<ww:date name="person.birthday" nice="true" />
使用易讀(readable notations)的模式
<ww:date name="person.birthday" />
使用默認的格式輸出
其中顯示的規則如下:
1、如果制定了nice="true"則優先以易讀(readable notations)的模式顯示
2、如果nice="false"則按照指定的format顯示
3、如果上面兩個屬性都沒有指定,則從默認的資源文件中尋找webwork.date.format這個i18n的key,按照它顯示
4、如果還沒有找到則按照DateFormat.MEDIUM格式顯示
5、特別之處:如果從ValueStack沒有找到值,則默認顯示空白(而不是null)
就這么簡單,感覺讀(readable notations)模式尤其有趣,非常好用,你還可以給它指定i18n的顯示方式。
下面共享一下我寫的zh_cn版本,你只需要將一下內容拷貝到classpath下面的default.properties文件中就可以了(也可以按照i18的資源文件命名規則):
webwork.date.format.past
=
{
0
}?以前
webwork.date.format.future
=
在?{
0
}?
webwork.date.format.seconds
=
幾秒鐘前?
webwork.date.format.minutes
=
{
0
,
choice
,
1
#一分鐘|
1
<{
0
}?分鐘}?
webwork.date.format.hours
=
{
0
,
choice
,
1
#一小時|
1
<{
0
}?小時}{
1
,
choice
,
0
#|
1
#零一分鐘|
1
<零?{
1
}?分鐘}?
webwork.date.format.days
=
{
0
,
choice
,
1
#一天|
1
<{
0
}?天}{
1
,
choice
,
0
#|
1
#零一小時|
1
<零?{
1
}?小時}?
webwork.date.format.years
=
{
0
,
choice
,
1
#一年|
1
<{
0
}?年}{
1
,
choice
,
0
#|
1
#零一天|
1
<零?{
1
}?天}?
輸出的樣子如:“一天零 8 小時 以前”,“4 天零 23 小時 以前”……
你也可以自己翻譯,默認的key如下:
i18n文件默認為default.properties
webwork.date.format.past
=
{
0
}?ago?
webwork.date.format.future
=
in?{
0
}?
webwork.date.format.seconds
=
an?instant?
webwork.date.format.minutes
=
{
0
,
choice
,
1
#one?minute|
1
<{
0
}?minutes}?
webwork.date.format.hours
=
{
0
,
choice
,
1
#one?hour|
1
<{
0
}?hours}{
1
,
choice
,
0
#|
1
#
,
?one?minute|
1
<
,
?{
1
}?minutes}?
webwork.date.format.days
=
{
0
,
choice
,
1
#one?day|
1
<{
0
}?days}{
1
,
choice
,
0
#|
1
#
,
?one?hour|
1
<
,
?{
1
}?hours}?
webwork.date.format.years
=
{
0
,
choice
,
1
#one?year|
1
<{
0
}?years}{
1
,
choice
,
0
#|
1
#
,
?one?day|
1
<
,
?{
1
}?days}?
為2.2.2的Webwork發布興奮之余也為它的未來有些擔心,到Struts Action Framework發布還有挺久,其中的真空期很難等待呀,WW一向有些小毛病,靠nightly build改善還是很麻煩的。
2.2.2的更多功能的探索希望大家能夠互相交流。
還有點補充:現在用ww:property輸出Date類型的數據默認會顯示到毫秒……請注意。