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. solr使用语法笔记

    http://127.0.0.1:8095/shangbiao_sale/select?sort=id+desc&fq=&wt=json&json.nl=map&q=s ...

  2. Linq中使用反射实现--LINQ通用数据表绑定DataGrid控件的方法(原创)

    项目需求,因为项目中存在很多表,这些表的内容需要呈现给客户浏览.转载请注明出处 相信很多写过程序的设计者很容易的用以下方式实现 在SqlConnect ,DataSet 的方式,我们很轻松的可以通过S ...

  3. SQL Server2008清除数据库日志

    m缪国瑞  11:10:17 --'这里的DNName_Log 如果不知道在sys.database_files里是什么名字的话,可以用以下注释的语句进行查询USE dochuanGOSELECT f ...

  4. TestNG Assert 详解

    org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参数类型及参数个数,double 3 ...

  5. select 相关

    获取select :获取select 选中的 text : ? 1 $("#ddlregtype").find("option:selected").text( ...

  6. WebView解析

    WebView解析   WebView是一个基于Webkit的,相当于内置浏览器的强大功能的组件,WebView的使用这么分四步说明:添加组件,加载资源,属性设置,辅助功能. 一.WebView的添加 ...

  7. Android+jsp +html 文件上传案例 已测试 成功通过

    我文件上传一直是广大读者一个问题 今天就把成功案例写下 javaweb 网页前段 <%@ page language="java" import="java.uti ...

  8. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

  9. Navsion二次开发_学习笔记

    CodeUnit Note   This feature is documented in the Navision Application Server Technical White Paper. ...

  10. SQL Server 2016 CTP2.3 的关键特性

    SQL Server 2016 CTP2.3 的关键特性 数据库方面的增强 Row Level Security已经支持In-memory OLTP 表.用户现在可以对内存优化表实施row-level ...