码迷,mamicode.com
首页 > 其他好文 > 详细

Struts的ONGL

时间:2014-08-23 11:20:10      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:struts   ongl   

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

  结构如下图:

bubuko.com,布布扣

  如何去访问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;
}


Struts的ONGL

标签:struts   ongl   

原文地址:http://blog.csdn.net/u011662320/article/details/38717041

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!