4.1 Value Stack栈
对于每个动作调用,structs在执行相应的动作方法之前都会先创建一个名为value stack的对象,用来保存相应的动作对象和其他对象
分为两个部分(逻辑上):Object Stack:用来保存动作及相关对象,ContextMap:保存映射关系,Map对象,包括parameters,request,session,application 等
需要访问ContextMap时,要在OGNL表达式上加上一个前缀#,如果没有前缘,搜索将在Object Stack里进行
4 .2 读取Object Stack 里的对象属性
三种形式:object.propertyName
object['propertyName']
object["propertyName"]
栈顶元素为[0],依次往下为[1],[2],[3].....
如栈顶元素有属性address,address有属性NO,访问NO属性可用[0].address.NO
下标[n] 表示从第n个对象开始搜索,如果[1],time,第1个对象没有time属性,将继续搜索第2个对象,依次类推,直到搜索到为止。
<s: property value="[0].time" />
用来输入[1]里的time的值。
4.3读取ContextMap里的对象属性
加前缀#,同Object Stack.
如#session.code 将返回会话属性code
#attr['lastAccessDate']试图在request对象里寻找lastAccessDate属性,如果没有找到将在会话对象和应用程序对象里继续搜索。
attr:这个Map用来按照request, session, application 顺序来搜索这个属性。
4.4如何调用字段和方法
可以调用任何一个java类(包括被压入value stack栈的对象)的静态字段和方法。
语法:@完整类名@字段名/方法
如:@java.util.Calender@DECEMBER
@app04a.Util@now() 调用util里的确now方法
调用一个实例的字段和方法语法object . 字段名 :object为Object Stack栈中的一个引用
object.方法名()
如:[0].dataPattern:调用栈顶对象的pattern字段
[0].repeat(3,"hello") 调用栈顶对象的repeat方法
4.5访问数组类型属性
如
public String[] getColors{
String[] colors={"blue","red","green"};
return colors;
}
读取colors属性时,将返回blue,red,green(以,分隔,没有[]), colors[0]将返回blue , colors.length将返回3
4.6访问List类型的属性
如:
public List<String> getCountries{
List<String> countries =new ArrayList<String>();
countries.add("Austrilia");
countries.add("USA");
countries.add("China");
return contries; }
countries属性将返回[Austrilia, USA,China](以,分隔,用[])
countries.size/ countries.size()返回3
countries.isEmpty/countries.isEmpty() 判断是否为空
创建List:如{"Austrilia","USA","China"}将创建以上的确List, {"Austrilia","USA","China"}[1]将返回USA
4.7 访问MAP类型属性
如:
public Map<String,String> getCities(){
Map<String,String> cities=new HashMap<String,String>();
cities.put("1","a");
cities.put("2","b");
cities.put("3","c");
return cities;
}
访问cities属性返回{1=a,2=b,3=c}检索某个属性,用Map[key] 即可
如:cities["1"]返回a
cities.size/cities.size()返回3
如需检索ContextMap里的各个Map,加前缀#即可,如#application["code"]
创建Map: #{key1:value1, key2:vaule2.........}
如:#{"1":"a", "2":"b"}
4.8 JSP EL
输出JSP上的对象:
用structs标签<s: property value="name" />
用JSP EL:${name}
如:要输出请求标头,用structs标签很难实现,但用EL,${header.host}