您的位置:首页 > 编程语言 > Java开发

Struts中的值栈

2015-10-19 00:00 495 查看

什么是值栈?

值栈:ValueStack.其贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前s.

* 创建一个Action的实例,创建一个ValueStack.

Struts 框架把 ValueStack 对象保存在名为 “struts.valueStack” 的请求属性中,request中.

* 将值栈保存在request域中一份. request.setAttribute(“struts.valueStack”,valueStack);

值栈的内部结构?

值栈的内部结构有两个逻辑单元:

* 一个对象栈 :root CompoundRoot就是一个ArrayList.

* 一个ContextMap :context OgnlContext就是一个Map.

值栈ValueStack 和 ActionContext关系? --- 值栈的创建

查看源码;

* 在创建ActionContext时候,创建了ValueStack对象,同时将ValueStack存入到ActionContext中.

* 可以通过ActionContext对象获得到值栈对象

1

2

3

4

5

6
public

class

A{



private

B b;



}


public

class

B{



private

A a;



}


如何获得值栈对象?

1.通过ActionContext对象获得值栈.
// 1.获得值栈方式一:

1
ValueStack stack1 = ActionContext.getContext().getValueStack();


2.通过request域获得值栈对象.

// 2.获得值栈方式二:

1
ValueStack stack2 = (ValueStack) ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);


向值栈保存数据?

一般情况下说操作值栈:指的是操作值栈的root部分.

* push :将对象压入到栈顶.

* set :将对象压入到栈顶.
如果没有手动调用push或者set的时候:Action对象默认是在栈顶的.

* Action中的属性是否在栈中?一定在.
如果Action实现ModelDriven接口了:

* ModelDriven对象就会在栈顶.

在页面通过struts2标签 获取值栈内容?

获得root数据:

1

2

3

4

5

6

7

8
<s:property value=

"[1].top"

/>


<s:property value=

"name"

/>


<s:property value=

"user.username"

/>


<s:property value=

"user.password"

/>


<s:property value=

"username"

/>


<s:property value=

"password"

/>


<s:property value=

"list[0].username"

/>


<s:property value=

"list[0].password"

/>


获得context的数据:

1

2

3

4

5
获得request中的数据:<

s:property

value

=

"#request.name"

/><

br

/>


获得session中的数据:<

s:property

value

=

"#session.name"

/><

br

/>


获得application中的数据:<

s:property

value

=

"#application.name"

/><

br

/>


<

s:property

value

=

"#attr.name"

/>


<

s:property

value

=

"#parameters.username"

/>


来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: