ValueStack对象是Struts2中一个重要的对象,它贯穿整个Action的生命周期,每个Action类的对象实例会拥有一个ValueStack对象。
在ValueStack对象中主要封装了两个对象,一个是Context,另一个是栈。其中Context是一个Map对象,其操作方法主要是put()与get()方法;而栈是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。它的主要操作方法是push()、pop()、peek()方法。
在项目实践中,如显示列表数据,可以将其查询到的数据List存放于Context中,其方法如下:
ActionContext.getContext().put("departmentList", departmentList);
而在jsp页面中,可使用<s:iterator value="#departmentList">迭代数据,由于Context是Map结构所以需要加上#号。
如编辑数据时,需要显示回显数据,可以将数据压到栈顶,代码如下:
// 准备回显的信息
Department department = departmentService.getById(model.getId());
ActionContext.getContext().getValueStack().push(department);
那么在JSP页面中直接可以使用Struts2标签取出。