struts2标签库主要使用的是OGNL语言,类似于El表达式,但是强大得多,它是一种操作对象属性的表达式语言,OGNL有自己的优点:

    1. 能够访问对象的方法,如list.size();
    2. 能够访问静态属性和静态方法,只需要在类名前,方法前加上@,如@Math@PI;
    3. 支持赋值操作.如赋值#value=5;
    4. 能够访问OGNL上下文和ActionContext;
    5. 能操作集合类对象.
  • 使用OGNL:

    public class Test {
    
        public static void main(String[] args) throws OgnlException {
    
            //原则:数据分为两类--常用的和不常用的--常用的数据直接取,不常用的数据加#获取
    Map<String, Object> map=new HashMap<String, Object>();
    map.put("name", "zhangsan");
    map.put("age", 22);
    User user=new User();
    user.setName("lisi");
    Object object = Ognl.getValue("name", map, user);
    System.out.println(object);//输出结果为lisi
    Object object1 = Ognl.getValue("#name", map, user);
    System.out.println(object1);//输出结果为zhangSan } }

    在jsp页面中使用struts2标签库:

    1:导入标签库    <%@ taglib prefix="s" uri="/struts-tags" %>

    注意:要使用struts2标签,那么要通过struts2过滤器来启用.如果过滤器的配置为<url-pattern>为*.action时,是不能直接通过url访问jsp页面的,需要通过action跳转.如果配置为<url-pattern>为/*时,是可以直接访问jsp页面的.struts2不推荐直接访问jsp页面,为了安全,推荐使用action来控制.

  下面是一个简单登录案例的LoginAction的代码(实体类user有两个属性name,pwd,代码省略,login.jsp代码也省略):

package com.wang.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.wang.entity.User; public class LoginAction extends ActionSupport{ private User user;
public String login(){
System.out.println(user.getName()+":::"+user.getPwd());
if("wang".equals(user.getName())&&"123".equals(user.getPwd())){
ActionContext.getContext().getSession().put("user", user.getName());
return SUCCESS;
}else{
return LOGIN;
} } public String exit(){
ActionContext.getContext().getSession().remove("user");
System.out.println("tuichu");
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} }

  当登录成功时会跳转到succ.jsp页面,假设我们要在该页面获取到登录的用户名,并在浏览器显示出来,succ.jsp代码应该这样写(只保留body部分核心代码):

<body>
<h1>欢迎用户${sessionScope.user }---------------<a href="user/exit.action">退出</a></h1>
<h1>欢迎用户<s:property value="user.name"/>---------------</h1>
<h1>欢迎用户<s:property value="#session.user"/></h1> </body>

这三种方式都能把用户名wang给显示出来,第一种使用的el表达式,这里不再多说,第二种取得是user对象里的一个属性,而User本身是LoginAction的一个属性,用ognl表达式取值时可以直接取到,但我们希望取得是我们存入session里的user,当在session,request,application域中取数据时,应当在在前面加上#,如上.上述第三种方式相当于:session.getAttribute("user");

结论:使用ognl表达式访问action的属性时,可以直接访问.访问actionContext中的数据时需要加#;

struts2学习笔记--OGNL表达式1的更多相关文章

  1. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  2. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

  3. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  4. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  5. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  6. Struts2学习笔记02 之 使用

    一.页面向Action传参 1.基本属性注入,页面命名name,action提供成员变量name并提供set方法. 2.域模型注入:页面用user.name对象点属性形式.action成员user对象 ...

  7. (补充)9.Struts2中的OGNL表达式

    OGNL表达式概述 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关 ...

  8. Struts2学习笔记(OGNL表达式)

    Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JSTL(JSP Standard T ...

  9. struts2学习笔记(五)—— OGNL

    一.OGNL概述 1.1 什么是OGNL OGNL的全称是对象图导航语言( object-graph Navigation Language),它是一种功能强大的开源表达式语言,使用这种表达式语言,可 ...

随机推荐

  1. CentOS6.5安装Tomcat

    安装说明 安装环境:CentOS-6.4 安装方式:源码安装 软件:apache-tomcat-7.0.56.tar.gz 下载地址:http://tomcat.apache.org/download ...

  2. Oracle数据库操作

    本例使用oracle数据库,使用PL/SQL可视化工具: --查询员工表数据 (emp为pl/sql自带的表,也可自己新建)select * from emp; --创建表空间create table ...

  3. 跟服务器交互的登录Demo

    服务器写死 账号密码,演示登录 服务器代码: 开发工具MyEclipse public class LoginServlet extends HttpServlet { /** * The doGet ...

  4. $Host.Runspace.ThreadOptions = “ReuseThread”有神马用?

    $Host.Runspace.ThreadOptions = “ReuseThread” 在很多PowerShell的脚本中你都会看到这个语句被用来开头,那它的作用是什么呢? 答:这个设置可以提高对内 ...

  5. html5学习笔记一

    HTML5学习笔记 <video>标记:定义视频,Ogg.MPEG4.WebM三种格式 <video src=”movie.ogg”  controls=”controls”> ...

  6. ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?

    症状: 类似上面的警告提示,运行程序不会有任何错误,但若干地方都提示警告,并且明明dll的引用都是正确的. 解决方案: 删除:C:\Users\{your computer name}\AppData ...

  7. Python黑帽编程2.5 函数

    Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...

  8. 走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图

    一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...

  9. MySQL 分区介绍总结

    200 ? "200px" : this.width)!important;} --> 介绍 分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区 ...

  10. CSS3 制作一个边框向周围散开的按钮效果

    我们将要达到的是如下的效果(若效果未出现请刷新): 分析 主要还是运用CSS3的transition, animation, transform还有渐变背景等特性. 由于按钮在鼠标进入时有不同的样式, ...