在struts2 标签中,默认的是使用的是ognl表达式,访问的是root valueStack里面的属性。

1.第二种方法时通过 el表达式去获得。(el表达式只能获得valueStack里面的对象)

 就有一点点疑问 el  /page/request/session/application 为什么会访问valueStack里面的属性。原因是struts2对HttpServletRequest做了进一步的封装。

只要放在root 里面的valueStack里面的对象,都可以用el表达式来实现。

<s:set> 有一个属性 scope :制定存放范围 request/session/parameters/application/attr

 如果没有制定,默认地是存放在ognlContext 里面,是和request等是并列的。所以要用#    在构造Map以及投影的时候,也是用到#

2. ognl 生成List的语法为: {e1,e2,e3}.

<s:select label="label" name="name"

list="{'name1','name2','name3'}" value="%{'name2'}" />

上面的代码生成了一个HTML Select对象,可选的内容为: name1,name2,name3,默认值为:name2。

生成Map的语法为:#{key1: value1,key2 : value2}    

在Map中,每个元素用,隔开,key 和value是用:分开

<s:select label="label" name="name"

list="#{'foo':'foovalue', 'bar':'barvalue'}" />

上面的代码生成了一个HTML Select对象,foo名字表示的内容为:foovalue,bar名字表示的内容为:barvalue。

3.小知识点:

 <s:property>  没有value 属性,则默认输出的是栈顶的值

<s:iterator>  ------会把当前对象默认地放在值栈的栈顶中

<s:param>

里面的value默认的是采用ognl表达式

<s:url> 里面的属性值 (value ) 默认作为字符串处理(原样输出)

%{}里面的表达式当做ognl 处理

%{}这样的形式是ognl表达式语言,在Struts2标签内部使用,在外部可以使用el表达式。在内部,如使用el表达式,则会报错