Struts的ONGL

Struts的ONGL

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1.什么是OGNL
OGNL它是Object Graphic Navigation Language(对象图导航语言)缩写,

   它是一个开源项目。

Struts2框架使用OGNL作为默认的表达式语言。
功能比EL强的N倍.
OGNL只不过一种表达式语言而已,使用它必须结合Struts2的标签.

   解说OGNL比先了解ValueStack(值栈),Struts2核心.

2.值栈是相应每个请求对象的轻量级的内存数据中心。
(把一次请求相关的所有数据所有保存到ValueStack对象).
   (1).ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。
   (2).ValueStack贯穿整个Action的生命周期:每一个Action类的实例都拥有一个ValueStack对象。 ValueStack相当于数据的中转站,在当中保存当前Action 对象和其它相关对象信息。
   (3).Struts2框架把ValueStack对象保存在名为“struts.valueStack”的request属性中。


   request.setAttribute(“struts.valueStack”,vs);
3.ValueStack内部结构
ValueStack中存两个属性:
  1.root:根, 类型 CompoundRoot,其本质是ArrayList.

  2.context:上下文,类型是Map

  结构例如以下图:

Struts的ONGL

  怎样去訪问ValueStack中的数据:
  <s:property value=””/>
  若訪问的是root里的数据,就直接訪问. <s:property value=”属性名”/>
  若訪问的是context里的数据,得使用.#<s:property value=”#属性名”/>


4.怎样获得值栈对象
  方式1:
      ValueStack vs = (ValueStack)requets.getAttribute(“struts.valueStack”);
  方式2:
      ValueStack vs = ActionContext.getContext().getValueStack();

5.向值栈保存数据(主要针对root对象)4种方式:
①.将数据保存root的索引0位置,放置到第一个元素 ArrayList.add(0,element);
valueStack.push(“一叶扁舟”);数据压栈
②.在值栈创建參数map,将数据保存到map中
 valueStack.set(“age”, “22”);

一般的,我们仅仅要在Action类中提供属性的訪问方法(getXxx). 就会被自己主动压到栈顶.
class xxAction{}
private User user;
//属性user
public User getUser() {
return user;
}
}
<s:property value=”user.name”/>
<s:property value=”user.age”/>
Struts2支持使用EL表达式来获取信息. Strutss又一次改写了EL获取属性的代码

6.向值栈保存数据(主要针对contextt对象)两种方式:
   ActionContext.getContext().getContextMap().put(“name”, “一叶扁舟”);
 //简单方式

ActionContext.getContext().put(“name”, “无悔”);

ValueStack在开发中的应用
主流应用 : 值栈 解决 Action 向 JSP 传递 数据问题 
Action 向JSP 传递数据处理结果 。结果数据有两种形式 
1) 消息 String类型数据
super.addFieldError(“msg”, “字段错误信息”);
super.addActionError(“Action全局错误信息”);
super.addActionMessage(“Action的消息信息”);

fieldError 针对某一个字段错误信息 (经常使用于表单校验)、
actionError (普通错误信息。不针对某一个字段 登陆失败)、 
actionMessage 通用消息

在jsp中使用 struts2提供标签 显示消息信息
<s:fielderror fieldName=”msg”/>
<s:actionerror/>
<s:actionmessage/>
2) 数据 (复杂类型数据)
<s:iterator />标签
若数据存储在root:
public List<User> getList() {
return list;
}

<s:iterator value=”list” >
<s:property value=”name”/>   <s:property value=”email”/> <s:property value=”age”/><br/>
</s:iterator>
该标签在迭代的时候,会吧每个迭代对象压入栈顶.

若数据存储在context:
ActionContext.getContext().put(“userList”, list);
<s:iterator value=”#userList” >
<s:property value=”name”/>   <s:property value=”email”/> <s:property value=”age”/><br/>
</s:iterator>


版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116811.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月15日 上午9:00
下一篇 2022年1月15日 上午9:00


相关推荐

  • 课堂结对编程

    课堂结对编程问题描述 nbsp 设计一个能身测试高体重是否标准的面向对象的程序 然后我与陆云杰同学一同完成 结对编程的过程很棒 在这里对云杰同学表示感谢 代码 include include Test h usingnamespa voidfun out doubleW doublew intmain doubleh w chars

    2026年3月16日
    3
  • 数据库和数据仓库的区别与联系_大数据的四个特点

    数据库和数据仓库的区别与联系_大数据的四个特点1.概念方面.数据库:是一种逻辑概念,用来存放数据的仓库。通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里可以有很多字段。字段一字排开,对应的数据就一行一行写入表中。数据库的表,在于能够

    2022年8月5日
    6
  • 吞吐量达到瓶颈后下降_Fusionio性能测试与瓶颈分析 | 学步园

    吞吐量达到瓶颈后下降_Fusionio性能测试与瓶颈分析 | 学步园测试环境 DellR510 2 E5620 24G Fusion ioioDrive320 测试工具 RedhatLinux5 3 OracleOrion1 测试一 8K 随机读 IOPS 超过 5W 吞吐量超过 400M 响应时间在 IOPS 达到 4W 时出现拐点 超过 1ms 并迅速上升至最高值 9 5ms

    2026年3月17日
    2
  • Teleport Ultra/Pro 1.72 安装+便携版(备份网站内容工具+离线网页浏览)[通俗易懂]

    Teleport Ultra/Pro 1.72 安装+便携版(备份网站内容工具+离线网页浏览)[通俗易懂]TeleportPro由美国TennysonMaxwell公司开发,曾被PCMagazine评为”编辑选择奖”、ZDNet评为五星。它可以完全或部分下载一个网站上的内容,使用户能够离线浏览;可以在硬盘上创建一个与原网站完全相同的镜象;可以在网站上寻找并下载某一类型的文件;可以探测并记录一个网站的所有网页和文件的清单;可以从一个中心网站探测每一个与之链接的网站。TeleportPro支持HTML4.0、CSS2.0、DHTML和Javaapplet,实现了能够处理所有类型网站上的文件;它可以同..

    2025年10月7日
    9
  • 蓝牙协议详解(蓝牙是什么)

    蓝牙协议分析(1)基本概念 蓝牙4.1,是一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;AMP直接使用802.11。而这一切的目的,就是以兼容性和易用性为基础,在功耗和传输速率之间左右为难。1.蓝牙技术的概述1.1两种蓝牙技术:经典蓝牙(检称BT)和低功耗蓝牙(简称BLE) 蓝牙协议包括两种技术:经典蓝牙(简称BT)和低功耗蓝牙(简称BLE)。这两种技术,都包括搜…

    2022年4月10日
    153
  • matlab改变图片分辨率_matlab导出600dpi

    matlab改变图片分辨率_matlab导出600dpi问题在使用matlab脚本进行绘图后希望使用函数保存图片,并设置分辨率,为后续修改提供方便方法1.saveas函数saveas(Fig,’SMAWireASpringBack’,’png’)获取图片句柄,设置图片名称,图片类型,这里没设置路径,详细参考matlab自带帮助很简单的2.print函数print(Fig,’SMAWireASpringBack’,’-dpng’…

    2025年11月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号