1.在Action中有一個static 方法,可以直接在頁面中調用,通過@包名。類名@方法名
獲取public static final 屬性名一樣
<s:property value=”@com.test.ognl.LoginAction@get()”/>
2.在Action中所有屬性都會放在ValueStack中,可以不用任何符號直接訪問
<s:property value=”Action中屬性名”/>
3.如果屬性為一個bean對象,可以在頁面中直接訪問bean的屬性和方法
4.ValueStack:每一個Action(包含屬性和方法)實例對象中都會擁有一個ValueStack對象;與Action的生命周期相同,在內存中的位置與parameters,reqeust,session.application 一樣,只是ValueStack不用使#獲取對象.一次請求(如Action(chain)共享一個值棧,ation都在valueStack中,也可直接往ValueStack中放一個對象
ActionContext.getContext().getValueStack().put(Obj)
5.獲取數組和List(為Action中一個屬性)中某一個值:
<s:property value=”list[0]”/>
6.獲取Set(Action中一個屬性):
Set testSet = new HashSet();//Set中元素是沒有順序的,所以不能用下標取
<s:property value=”testSet”/>
7.獲取Map(Action中的一個屬性):
Map map = new HashMap();
獲取所有:<s:property value=”map”/>
獲取某一個值:<s:property value=”map[‘m1’]”/>
8.集合類中都有一些偽屬性:
如:Map,List,Set 中有的size, isEmpty
List 中獨有的 iterator 能夠返回一個迭代器
Map 中獲取所有的鍵,所有的值: keys ,values
Iterator中next ,hasNext
Enumeration
9.JDK中類默認已經重寫了toString()方法,而我們自定義的類中如果不重寫這個方法,只能調用Object中的toString()方法,打印出getClass().getName() + '@' + Integer.toHexString(hashCode()),如下:com.test.vo.Student@00fcb
如果不想這么顯示,則需要在Student類中得寫toString()方法:
Public String toString(){ return “aaa”;}
10.我們利用toString()方法可以打印出所有對象,但有時候我們不想獲取所有屬性,只獲取List中對象的部分屬性,可以利用投影技術實現:
如下 獲取userName屬性值(即:從大集合中得到一個小集合):
<s:property value=”student.{userName}”/>
如果再想取出投影中某一個值:則<s:property value=”student.{student}[0]”/>
11.利用選擇技術獲取List中滿足某些條件的對象 #
<s:property value=”student.{?#this.grade>=60}”/>
<s:property value=”student.{^#this.grade>=60}.{userName}”/>
<s:property value=”student.{#this.grade>=60}.{userName}[0]”/>
? 取出所有對象 返回字符串
^ 取出第一個對象,返回一個聯表,可以取size
$ 取出最后一個對象,
12. #的作用:
內存中五大對象 parameters,request ,session,application ,attr中獲取對象,要用#
Parameters: <s:property value=” #parameters.userName”/>
如果要使用URL傳值,則<result type=”redirect”>/test.jsp</result>
13. %的作用:
%可以取出存放在ValueStack中的Action對象,并直接調用他的方法
如果我們的Action繼承ActionSupport類,則可以%{getText(‘key’)}用這種方式取出國際化信息
14. $的作用:${}
$可以在國際化資源文件中引用OGNL表達式
$也可以在struts.xml配置文件中引用表達式
15.struts2中從一個Action1跳到另一個Action2(使用chain),則跳轉后先從Action2的ValueStack中查找值,再從Action1 ValueStack中查找值
服務器端跳轉:
<action name=”testv1” class=”com.test.TestV1”>
<result type=”chain”>
<param name=”actionName”>testv2</param>
</result>
</action>
客戶端跳轉:
<action name=”testv2” class=”com.test.TestV2”>
<result type=”redirectAction”>
<param name=”actionName”>testv2</param>
</result>
</action>