Struts2 Tag語法(轉(zhuǎn))
Struts2 Tag語法
設(shè)計(jì)tag的目的是為了顯示動(dòng)態(tài)的數(shù)據(jù)
如果我們想要顯示一個(gè)屬性"name",我們傳遞字符串"name"給要顯示的tag
Example1:
<s:textfield name="name"/>
如果在值棧里面有一個(gè)"name"屬性,那么它就會(huì)在標(biāo)簽中顯示出來!當(dāng)這個(gè)值提交給struts框架時(shí),標(biāo)簽的值會(huì)放入到“name"屬性中!
有時(shí),我們還會(huì)傳遞動(dòng)態(tài)數(shù)據(jù)給一個(gè)tag,例如,我們可能想要使用一個(gè)input field和一個(gè)label來顯示數(shù)據(jù),而label的數(shù)據(jù)也從應(yīng)用程序的資源中得到!因?yàn)閟truts會(huì)從標(biāo)簽的屬性中去分析表達(dá)式,所以我們可以我們可以在運(yùn)行時(shí)在tag的屬性中加載動(dòng)態(tài)數(shù)據(jù)!
表達(dá)式的格式是: "%{.....}" ,這個(gè)表達(dá)式中的所有文本會(huì)被當(dāng)作一個(gè)表達(dá)式!
struts2中的默認(rèn)表達(dá)式語言是OGNL,使用這種表達(dá)式可以調(diào)用方法和得到屬性的值,一個(gè)比較好的例子是getText方法,這個(gè)方法由ActionSupport提供!因?yàn)锳ction也在棧中,所以我們可以在表達(dá)中調(diào)用它的任何方法!
例子:
<s:textfield label="%{getText("labelName")}" name="name"/>
其中的"labelName"來自資源文件
package.properties
labelName=The First Label
.........
非字符串屬性
HTTP協(xié)議是基于文本的,不過一些標(biāo)簽有非String類型的屬性:bool ,int ....。struts2中,所有非String類型由表達(dá)式得到,但表達(dá)式符號(hào)不是必需的,
<s:select key="state.label" name="state" multiple="true"/>
<s:select key="state.label" name="state" multiple="%{true}"/> //有表達(dá)式符號(hào)
<s:select key="state.label" name="state" multiple="allowMultiple"/>//從屬性中取值
<s:select key="state.label" name="state" multiple="%{allowMultiple}"/>
//詳細(xì)的從屬性中取值的表達(dá)式
上面的multiple屬性映射為一個(gè)boolean值,struts 框架并沒有認(rèn)為它是一個(gè)String 值,是因?yàn)榭蚣苤邪阉闯闪艘粋€(gè)表達(dá)式,并自動(dòng)的轉(zhuǎn)換成一個(gè)boolean值!
值是對(duì)象
我們由一個(gè)例子說明
<s:textfield key="state.label" name="state" value="cA"/>
當(dāng)一個(gè)textfield被傳遞了一個(gè)叫"CA"的屬性,struts會(huì)從所有的屬性中尋找一個(gè)名為getCA的getter屬性從面得到這個(gè)對(duì)象的引用。
另一種方式是通過表達(dá)式符號(hào)得到對(duì)象的引用!
<s:textfield key="state.label" name="state" value="%{cA}"/>
總結(jié):
通過上面的分析我們得到tag屬性值得到的規(guī)則:
1.所有的String屬性值"value"會(huì)被解析為"%{value}"
2.所有非String屬性會(huì)直接由表達(dá)式得到結(jié)果!
3.在2中當(dāng)非String值使用"%{}"時(shí),符號(hào)會(huì)被忽略!
<s:select key="state.label" name="state" multiple="true"/>
<s:select key="state.label" name="state" multiple="%{true}"/> //有表達(dá)式符號(hào)
<s:select key="state.label" name="state" multiple="allowMultiple"/>//從屬性中取值
<s:select key="state.label" name="state" multiple="%{allowMultiple}"/>
//詳細(xì)的從屬性中取值的表達(dá)式
上面的multiple屬性映射為一個(gè)boolean值,struts 框架并沒有認(rèn)為它是一個(gè)String 值,是因?yàn)榭蚣苤邪阉闯闪艘粋€(gè)表達(dá)式,并自動(dòng)的轉(zhuǎn)換成一個(gè)boolean值!
值是對(duì)象
我們由一個(gè)例子說明
<s:textfield key="state.label" name="state" value="cA"/>
當(dāng)一個(gè)textfield被傳遞了一個(gè)叫"CA"的屬性,struts會(huì)從所有的屬性中尋找一個(gè)名為getCA的getter屬性從面得到這個(gè)對(duì)象的引用。
另一種方式是通過表達(dá)式符號(hào)得到對(duì)象的引用!
<s:textfield key="state.label" name="state" value="%{cA}"/>
總結(jié):
通過上面的分析我們得到tag屬性值得到的規(guī)則:
1.所有的String屬性值"value"會(huì)被解析為"%{value}"
2.所有非String屬性會(huì)直接由表達(dá)式得到結(jié)果!
3.在2中當(dāng)非String值使用"%{}"時(shí),符號(hào)會(huì)被忽略!
posted on 2009-03-04 12:59 liujg 閱讀(194) 評(píng)論(0) 編輯 收藏