ognl表达式的小知识点

  今天在做一个登录模块时,想再登录之后的首页上显示登陆者姓名,自然就想到在action里将登陆者姓名传入session中,然后在页面通过ognl提取信息,action代码如下:

1 if(us.getUser_name().equals(username)&&us.getPassword().equals(password))
2             {
3                     ActionContext.getContext().getSession().put("user_login",username);//将登陆信息放入actioncontext中
4                 //ServletActionContext.getRequest().getSession().setAttribute("user_login",username);
5                 return SUCCESS;
6             }

页面显示代码:

1 <div id="huanying"><s:property value="#user_login"/>,欢迎你!

然后,就出问题了……取不到值;

当时我就在想啊,session应该是在valueStack中的context中的,通过ognl的#+属性值的方法应该可以的啊,怎么也想不通。于是用request(用的是转发即默认,不是重定向)和context都试了一下,结果是只有放入context中的值才能被取出来。这就尴尬了,,,,开始,我还怀疑是值没存进session和request中,因此我用el表达式测了一下,完全没问题,所以我就想是不是自己的ognl写错了。结果一度娘,果然出了问题,ognl虽然可以提取所有值域中的值,但是如果是session或者request中的值就必须要加上相关的域名:

1 <s:property value="#session.user_login"/>//取存在sessiong中的值
2 <s:property value="#request.user_login"/>//取存在request中的值(前提是转发而不是非定向)

ognl默认是直接从context中取值,所以才出了问题。EL表达式是从四大作用域按从小到大的顺序取值。

  哎……还是学艺不精啊。。。。。。不过问题虽然小,但也算是一种积累啦……

posted @ 2016-05-27 20:06  jkavor  阅读(492)  评论(0编辑  收藏  举报