第四章 OGNL 对象-图形导航语言:深入浅出struts

 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}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值