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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 均方误差与方差的区别_平均数 方差 标准差

    均方误差与方差的区别_平均数 方差 标准差一、百度百科上方差是这样定义的:看这么一段文字可能有些绕,那就先从公式入手,对于一组随机变量或者统计数据,其期望值我们由E(X)表示,即随机变量或统计数据的均值,然后对各个数据与均值的差的平方求和,最后对它们再求期望值就得到了方差公式。这个公式描述了随机变量或统计数据与均值的偏离程度。二、方差与标准差之间的关系就比较简单了根号里的内容就是我们刚提到的那么问题来了,

    2022年9月1日
    8
  • java开发webservice接口_webservice接口的开发和调用

    java开发webservice接口_webservice接口的开发和调用一、WebService的开发手段使用Java开发WebService时可以使用以下两种开发手段1、使用JDK开发(1.6及以上版本)2、使用CXF框架开发(工作中)二、使用JDK开发WebService2.1、开发WebService服务器端1、定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法,如下所示:1package…

    2022年7月16日
    20
  • 不管这些了三国杀_三国杀身份局胜率

    不管这些了三国杀_三国杀身份局胜率一、【三国杀】是一种什么卡牌游戏?如果给三国杀下一个明确的定义的话,避不开两个词“非集换式”,“桌游”。我个人对“卡牌”有三个理解,崔斯特,集换式,非集换式。崔斯特是一个说话很有腔调的性感小胡子男人。集换式,小时候的水浒卡,三国卡,注重于收藏而非游戏性(当然后来还有了战神镖)。游戏性、竞技性比较强的,游戏王,还有如日中天的炉石(似乎也不算传统意义上的了)。非集换式的,三国杀,广泛点的

    2022年7月27日
    10
  • Linux 下一个 Mysql error 2002 错误解决

    Linux 下一个 Mysql error 2002 错误解决

    2022年1月13日
    86
  • 微信公众号开发-超级简单[通俗易懂]

    微信公众号开发-超级简单[通俗易懂]1自动回复功能【图片模糊的双击图片,就清晰了】公众号注册网上一大把,搜下就可以了这个功能就是别人给公众号发什么消息,就返回指定内容关键词回复:输入关键词,返回指定内容收到消息回复:当你不是输入关键词时,自动发送当前消息,如果输入的是关键词,就返回关键词所指定的内容被关注回复:当公众号被关注时,自动给用户发的消息1案例,添加关键…

    2022年5月12日
    41
  • Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.

    Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.

    2021年3月12日
    166

发表回复

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

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