在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表达式,则会报错