日期:2014-05-16  浏览次数:20397 次

总结各种jsp和后台的各种传值
    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>

结果如下: