1、EL表达式
EL表达式的一般操作的四大作用域application、session、request、pagecontext(作用域由大到小)中的属性。el表达式操作不了局部变量。
EL实现变量类型的自动转换。
EL表达式必须以“${XXX}”来表示,其中"XXX"部分就是具体表达式内容
2、El表达式实例分析
${s},会自动按照pagecontext,request,session,application的顺序去找属性名为s的属性。
<%=((Person)request.getAttribute("qy")).getName2()%>--${qy.name2}
${requestScope.s}相当于:<%=request.getAttribute("s")%>
注意:EL表达式中的变量,都必需用setAttribute("a","AA")放在四大作用域里。
${empty a}如果a是null,空字符串或者空的集合就返回true,否则返回false。
${param a}相当于:<%=request.getParameter("a")%>
${paramValue.b[0]}相当于:<%=request.getParameterValues("b")[0]%>用于多个同名不同值参数的情况。
3、回顾了EL之后,我们来看一看struts2中的各种传值。
Action中的代码:
public String add(){
ActionContext ac = ActionContext.getContext();
ac.put("ddd", "789");
Map<String, Object> session =ac.getSession();
session.put("ccc", "123");
Map<String,Object> request =(Map<String, Object>) ac.get("request");
request.put("aaa", "456");
return "index";
}
Jsp中的body:
<body>
${requestScope.aaa } -- ${request.aaa } --${attr.aaa }--${aaa}
-- <s:property value="#request.aaa"/>
-- <s:property value="#attr.aaa"/>
<hr/>
${sessionScope.ccc }--${ccc }--${session.ccc } --${attr.ccc }
-- <s:property value="#session.ccc"/>
-- <s:property value="#attr.ccc"/>
<hr/>
${ddd }
</body>
结果:
由以上结果可看出struts2中放入“假”request的元素,可以有六种方法取出,session自然也有六种,但是我们一般只取最简单的${aaa}和${ccc},在ognl(即S标签中)非ValueStack中的内容,需要加"#"来标识,告诉ognl不要再根对象中寻找,而是在其他上下文对象中寻找相关值。
OGNL获得上下文中的属性
Action中的代码:
public String execute() throws Exception {
//增加测试代码
uname="老高";
user = new User("root","123456");
user.setAddr(new Address("中国","北京","海淀区"));
return "success"
}
Jsp中的代码:
<body>
<p><s:property value="uname" /></p>
<p><s:property value="user.addr.country" /></p>
<s:debug></s:debug> <!-- 我们可以通过debug标签查看ActionContext中的情况 -->
</body>
结果如下: