Struts2值栈
值栈ValueStack是Struts2框架核心组件,它提供对上下文信息和执行环境中元素的访问机制。其在底层实现了一个栈,但与传统栈的实现有所不同。
值栈由以下4个层级对象组成
(1) 临时对象:这些对象在请求处理过程中需要临时保存,比如集合中当前正在迭代的元素;
(2) 模型对象:当Action实现了ModelDriven接口时,模型对象就会被存放在栈中被执行的Action前面;否则不存在这个级别的内容。
(3) Action对象:此对象为当前正在执行的action。
(4) 命名对象:任何对象都可以被赋予一个标志符而成为命名对象。比如与HTTP同等作用域的对象集合对应的Struts2命名对象,#application、#session、#request、#attr和#parameters等。
值栈的使用方式
栈的传统使用方式是压栈和出栈。对于值栈则是通过使用OGNL
(Object Graph Navigational Language对象导航语言)语法编写的特定表达式来查找,或者是在该表达式之上求值。
OGNL表达式
使用圆点符号和表达式求值
调用被检索对象的方法
结合自定义标签使用
常见用法:
(1) person.name 调用getPerson().getName()
(2) #session.user 从会话对象中获取user属性对象
(3) #session.shopcart.size() 获取会话中购物车的数量
(4) top 获取值栈最顶层对象
类型转换:
Struts2内置的类型转换:
String和int、Integer
String和double、Double
String和Map、List
String和Date
String和boolean
String和char
Struts2自定义类型转换
在Struts2中提供了StrutsTypeConverter类来简化自定义类型转换的设计,这个类有两个抽象方法需要实现:
(1) public Object convertFromString(Map context, String[] values, Class toClass) ;
用于String类型数据转成自定义类型的处理方法参数:
context --- 与Action有关的上下文信息
values --- 从请求中获取的参数值
toClass --- 要转换的目标类型
public String convertToString(Map context, Object obj) ;
用于自定义类型转换成String
参数:
context --- 与Action有关的上下文信息
obj --- 自定义类型对象
多说不如多做,下面看具体的小应用:
注册页面的写法:
”
Action组件中:
Public UserAction extends ActionSupport
{
private String username;
private String password;
//别忘了给username和 password提供set()和get()方法
System.println.out(“用户名”+username);
System.println.out(“密码”+password);
}
相对应---------username—password,在页面中的空间名字和action中的变量名;