102.OGNL表达式[3种符号的用法]

 与EL表达式类似,之所以能取到值,是因为OGNL把内置对象存在了值栈里。 

#号

#号相当于ActionContext.getContext()

因为context中的对象不是root对象,所以访问前面要加#

对象

内容

案例

parameters 包含封装了请求参数的Map #parameters[0]相当于request.getParameter("id")
request 包含HttpServletRequest属性的Map #request.name相当于request.getAttribute("name")
session 包含HttpSession属性的Map #session.name相当于session.getAttribute("name")
application 包含ServletContext属性的Map #application.name相当于application.getAttribute("name")
attr request>session>application顺序访问attribute #attr.name相当于从几个域中按顺序获取name值

 

也可以写成 #request["name"] 其他同理可推

访问root对象中的值的方法:

       Action中的代码:

ValueStack vs = ServletActionContext.getContext().getValueStack();
vs.set("name","张三");

     JSP页面中的代码:

姓名:

第二种方法存在一定问题,如多个实体类中有相同属性,如Person中有name,Employee中也有name,如果使用这个方法,它就会从对象栈中从上往下搜索第一个name的值

%号

这里有两种情况:

%{ognl表达式}   表示这里面是ognl表达式,这样环境就不会认为它是字符串

%{'字符串'}         这里括号里的字符串有引号引起来,就表示是字符串,不是表达式

如:

 

$号

主要有两个作用:

在国际化文件中引用OGNL表达式

在Struts2配置文件中使用OGNL表达式

比如:

Action中的代码:

ServletActionContext.getRequest.setAttribute("name","Jack");

struts.xml文件中的代码:


    
         /ognl/ognl.jsp?name=${#request.name}
    

 

 

 

你可能感兴趣的:(102.OGNL表达式[3种符号的用法])