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")
attrrequest>session>application顺序访问attribute#attr.name相当于从几个域中按顺序获取name值

 

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

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

       Action中的代码:

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

     JSP页面中的代码:

姓名:<s:property value="name"/>

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

%号

这里有两种情况:

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

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

如:

<s:textfield name="name" label="%{#request.name}"/>

 

$号

主要有两个作用:

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

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

比如:

Action中的代码:

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

struts.xml文件中的代码:

<package name="ognl" namespace="/ognl" extends="struts-default">
    <action name="userAction" class="edu.nustti.UserAction" method="{1}">
         <result name="ognl">/ognl/ognl.jsp?name=${#request.name}</result>
    </action>
</package>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值