前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts的ONGL

Struts的ONGL

作者头像
全栈程序员站长
发布2022-07-06 19:01:47
4200
发布2022-07-06 19:01:47
举报

大家好,又见面了,我是全栈君,今天给大家准备了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
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.cn/116811.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com