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>


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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • “Word在试图打开文件时遇到错误”的解决方法[通俗易懂]

    “Word在试图打开文件时遇到错误”的解决方法[通俗易懂] 大家都应该知道“.DOCX”格式只有Word2007或以上版本才可以打开,Word2003是无法打开的!正好我电脑上03和07都有,所以就答应了。接收文件打开后既然提示“Word在试图打开文件时遇到错误。请尝试下列方法”(如下图)。  还好,本人使用Office办公软件已经很多年了,各方面问题都遇见过,这点小难题难不到我的,三下两下就被我搞定了。相信遇到“W…

  • java 还原中文utf-8格式编码的字符

    java 还原中文utf-8格式编码的字符java 还原中文utf-8格式编码的字符

  • sql去掉重复的行_select去掉重复记录

    sql去掉重复的行_select去掉重复记录有重复数据主要有一下几种情况:1.存在两条完全相同的纪录这是最简单的一种情况,用关键字distinct就可以去掉example:selectdistinct*fromtable(表名)where(条件)2.存在部分字段相同的纪录(有主键id即唯一键)如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及groupby分组example:select*…

  • PyCharm 2021.5激活码(最新序列号破解)

    PyCharm 2021.5激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜

    2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜注:本文转载自网络,不代表本平台立场,仅供读者参考,著作权属归原创者所有。我们分享此文出于传播更多资讯之目的。如有侵权,请在后台留言联系我们进行删除,谢谢!相信对很多朋友们来说,一款好用的5G智能手机是非常值得入手的,小编为大家带来最新的20年11月值得购买的性价比5G手机榜单,相信会给您更好的手机选购指导,为你带来更好的智能生活体验,有喜欢的朋友们一起来看看吧。1、一加8Pro性能一…

  • 数据库的唯一索引_数据库唯一索引是什么

    数据库的唯一索引_数据库唯一索引是什么唯一索引是不允许表中任何两行具有相同索引值的索引。  当现有的数据中存在重复的键值时,大多数数据库不允许把新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键

发表回复

您的电子邮箱地址不会被公开。

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