Struts 2 --ONGL介绍

先了解一下OGNL的概念

OGNL的全名称Object Graph Navigation Language。全称为对象图导航语言,是一种表达式语言。使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。

OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。

值栈(ValueStack) :

可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。

Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。

调用ActionContext的put(key,value)放入的数据,需要使用#访问。

ODNL中有重要的三个符号: # % $

#:一般有三种用途

1.访问非跟对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当


1

2

3

public String getSavePath() {

    return ServletActionContext.getServletContext().getRealPath(savePath);

            }

2.用于过滤和投影(projecting)集合


1

persons.{?#this.name==‘pla1‘}.{age}[0]。

3.用于构造map。


1

#{‘foo1‘:‘bar1‘‘foo2‘:‘bar2‘}

%:

%符号的用途是在标志的属性为字符串类型时,计算机OGNL表达式

$:主要有两种用途

1.在国际化资源中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

2.在Struts2框架的配置文件中引用OGNL表达式.例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

<validators>

    <field name="user.username">

        <field-validator type="requiredstring">

            <param name="trim">true</param>

            <message>用户名不能为空</message>

        </field-validator>

        <field-validator type="stringlength">

            <param name="maxLength">10</param>

            <param name="minLength">6</param>

            <message>用户名长度必须在${minLength}和${maxLength}之间</message>

        </field-validator>

    </field>

</validators>

action类ExecuteAction.java:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

package cn.action;

import cn.entity.User;

import com.opensymphony.xwork2.ActionSupport;

public class ExecuteAction extends ActionSupport{

    private User user;

    private String okpwd;

    

    @Override

    public String execute() throws Exception{

        if(user.getUsername().length()==0){

            addFieldError("username""用户名不能为空");

        }

        if(user.getUserpwd().length()==0){

            addFieldError("userpwd""密码不能为空");

        }

        if(!user.getUserpwd().equals(okpwd)){

            addFieldError("userpwd""两次密码必须一致");

        }

        //捕获错误信息   返回input

        if(this.hasFieldErrors()){

            return INPUT;

        }

        return SUCCESS;

    }

    public User getUser() {

        return user;

    }

    public String getOkpwd() {

        return okpwd;

    }

    public void setUser(User user) {

        this.user = user;

    }

    public void setOkpwd(String okpwd) {

        this.okpwd = okpwd;

    }

}

总结OGNL的使用方法

访问属性


1

2

3

4

<s:textfield name="user.username" label="用户名"></s:textfield>

    <br/>

    <s:textfield name="user.userpwd" label="密码"></s:textfield>

    <br/>

访问方法


1

调用值栈中对象的普通方法:<s:property value="user.get()"/><br>

访问构造方法


1

调用普通类的构造方法:<s:property value="new struts.vo.Student(‘小明‘ , ‘男‘ , 3 , 25).username"/>

时间: 2024-10-12 21:09:02

Struts 2 --ONGL介绍的相关文章

Struts的ONGL

1.什么是OGNL OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写, 它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. 功能比EL强的N倍. OGNL仅仅只是一种表达式语言而已,使用它必须结合Struts2的标签. 讲解OGNL比先了解ValueStack(值栈),Struts2核心. 2.值栈是对应每一个请求对象的轻量级的内存数据中心. (把一次请求相关的所有数据全部保存到ValueStack对象). (1).Va

目前见到的最傻瓜全面的STRUTS入门教程^_^

目前见到的最傻瓜全面的STRUTS入门教程^_^ 一  Jakarta Struts学习之新手上路 Web 应用开发早期曾经是那么的“简单”,那个时候还只是纯HTML页面和浏览器特效而已.由于还涉及不到动态数据操作和商业应用,也就省去了很多麻烦.但是这 样的“简单”只是过眼云烟,如今我们不得不为复杂的基于Web的商业应用开发采用诸多技术. 本文将介绍如何利用Struts进行应用开发的前台整合的开发过程.Struts是一个为开发基于模型(Model)-视图(View)-控制器 (Controlle

Struts-接收表单的值

接收表单的值: 乱码问题:<constant name="struts.i18n.encoding" value="GBK"></constant> A:属性设值的方式 (1):简单:在Action设置属性,生成SET与GET方法. 参数的名称与属性的名称一致. (2):Action中设置Bean的属性 Bean必须生成SET.GET方法.Bean不可以实例化. Bean中必须要有一个默认的空参数的构造方法. 参数的名称 = bean的名称.

java面试题002

1.overload和override的区别 overload: 方法的重载 只在方法之间发生 方法名相同,并且区分大小写 参数列表不同,具体是指参数的类型,个数,顺序不同 返回值类型没有要求,可以相同,也可以不同 override: 方法的覆盖 发生在父子类之间 方法名称,参数表,返回值都相同 修饰符一样或者更宽 静态方法只能被静态方法覆盖,没有多态 子类不能抛出比父类更多的异常<指的是范围> 2.接口和抽象类的区别 抽象类(abstract-class): 1).抽象类不能创建对象,只可以

Structs2 ognl说明

下面是struts.xml中的配置 <!-- 以下设置参数值可以在struts2-core.jar中的org.apache.struts下的default.properties文件中查到 --> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <!-- value为true时(默认值为false)是开发模式,有更改会自动提交到web服务器去 -

Struts2框架学习第一章——Struts2概述

本章要点 —  Web应用的发展 —  Model 1和Model 2 —  MVC思想 —  MVC模式的优势 — 常用MVC框架及其特征 —  Struts 1的基本结构及其存在的问题 —  WebWork的基本结构 —  Struts 2的起源 —  Struts 2的框架架构 —  Struts 2的标签库 —  Struts 2的控制器组件 —  Struts 1和Struts 2的对比 Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发

传智博客(JavaWeb方面的所有知识)听课记录(经典)

一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本兼容低版本的编译器版本. (2).当程序有错误的时候,使用Debug as 运行程序.双击语句设置断点.程序运行到此处停止.点击跳入方法的内部代码.点击跳过,执行下一条代码,点击跳出,跳出方法.观察变量的值,选中变量右击 选择watch. 跳入下一个断点.查看断点,调试完后一定要清除断点.结束运行断

深入分析JavaWeb 43 -- Struts2开发入门

一.Struts2概述 1.Struts2是什么? Struts2是一个M(模型-域–范围模型)V(View视图)C(控制器)框架(模型2).框架都是一个半成品.提高开发效率. Struts1是一个MVC框架,非常流行.有很大的缺点.此时一个webwork的框架设计超前,名气不是很大.Struts1+webworkd=struts2.用的是struts1的名字,但是与sruts1没啥关系,struts2的核心是webwork框架. 2.Struts2能干什么? web开发Strust2 核心功能

Struts2 (下)

Struts中API介绍 ServletAPI 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的. 在实际开发中,经常使用到Servlet的API,比如进行登录,将用户的信息保存到Session中,有的时候需要向页面输出一些内容,用到response对象.涉及到Servlet的API的访问. 如何获得到servlet中的API 完全解耦合的方式 使用ActionContext来进行获取 注意 此方法只能从域中取数据和保存数据 不能获取其它的方法 使用步骤