struts2_关于valueStack的数据
来源:互联网 发布:修改mysql配置文件 编辑:程序博客网 时间:2024/06/18 07:40
1. valueStack携带的数据
我们都知道valueStack的一个主要应用就是将action中的数据传递到JSP页面中,然后传递过来的数据是怎么样的格式呢?
<1>文本(字符串格式)
1.fieldError 校验数据错误信息提示
2.actionError 关于逻辑操作时错误信息(例如登录失败)
3.message 就是一个信息.
this.addFieldError("msg", "字段错误信息");this.addActionError("Action全局错误信息");this.addActionMessage("Action的消息信息");* fieldError 针对某一个字段错误信息 (常用于表单校验)、actionError (普通错误信息,不针对某一个字段 登陆失败)、 actionMessage 通用消息。* 在jsp中使用 struts2提供标签 显示消息信息 <s:fielderror fieldName="msg"/> <s:actionerror/> <s:actionmessage/>
<2>复杂数据
可以用valueStack储存。
在action中存储数据:List<User> users = new ArrayList<User>();users.add(new User("tom", "123", 20, "男"));users.add(new User("james", "456", 21, "男"));users.add(new User("fox", "789", 26, "男"));如果使用的是push存储数据:vs.push(users);在页面上获取数据:使用了<s:iterator>标签来迭代集合。<s:iterator value="[0].top" var="user"> 这是将集合中迭代出来每一个元素起个名称叫user,而user是存储在context中,不在root中.<s:iterator value="[0].top" var="user"> username:<s:property value="#user.username"/><br> password:<s:property value="#user.password"/> <hr></s:iterator>注意:如果我们在使用<s:iterator>进行迭代时,没有给迭代出的元素起名.<s:iterator value="[0].top"> username:<s:property value="username"/><br> password:<s:property value="password"/> <hr></s:iterator>如果使用的是set储存:vs.set("users", users); <hr> <s:property value="users" /> <br> <s:iterator value="users" var="user"> username:<s:property value="#user.username" /><br> password:<s:property value="#user.password" /> <hr> </s:iterator> <hr> <s:iterator value="users"> username:<s:property value="username" /><br> password:<s:property value="password" /> <hr> </s:iterator>
2. 哪些数据被默认压入valueStack中?
有些数据会被默认压入valueStack当中,其中默认压入valueStack中的数据有以下几个:
<1>访问的action对象会被压入到valueStack中。
在DefaultActionInvocation中,有个init方法 stack.push(action);* Action如果想传递数据给 JSP,只有将数据保存到成员变量,并且提供get方法就可以了
<2>.ModelDriveInterceptor会执行下面操作。
//将实现了ModelDrive接口的action中getModel方法的返回值,也就是我们所说的model对象压入到了valueStackModelDriven modelDriven = (ModelDriven) action;ValueStack stack = invocation.getStack();Object model = modelDriven.getModel();if (model != null) { stack.push(model);}
3. 为什么EL能够访问valueStack中的数据?
struts2框架中所使用的request对象,是增强后的request对象。
${username}---->request.getAttribute("username"); 增强后的request,会首先在request域范围查找,如果查找不到,会在valueStack中查找。StrutsPreparedAndExecuteFilter的doFilter代码中 request = prepare.wrapRequest(request); * 对Request对象进行了包装 ,StrutsRequestWrapper * 重写request的 getAttribute Object attribute = super.getAttribute(s);if (attribute == null) { attribute = stack.findValue(s);}访问request范围的数据时,如果数据找不到,就回去值栈中去查找。因为request对象具备访问值栈数据的能力。(查找root中的数据)
阅读全文
0 0
- struts2_关于valueStack的数据
- 关于struts2.0的valuestack
- 关于valuestack
- struts2框架中关于ValueStack的认识
- ValueStack----数据回显的实现
- 访问ValueStack中的数据
- 关于struts的valuestack的几点思考
- 关于Struts2中的ValueStack,ActionContext,OgnlContext的理解之一:OGNL
- ValueStack和OGNL实现Struts2表单数据的存储原理
- 关于值栈(ValueStack)
- Strus2中关于ValueStack详解
- valuestack的工作原理
- valuestack的工作原理
- valuestack的工作原理
- ValueStack的使用
- valuestack
- ValueStack
- ValueStack
- 写在开头
- IntelliJ IDEA中怎么全局搜索替换(整个项目)(Eclipse)
- Java(JDK、环境变量、虚拟机、跨平台)
- 差分约束
- Ubuntu操作系统虚拟机下安装使用
- struts2_关于valueStack的数据
- C++命名空间浅析
- 损失函数J的最小二乘思路推导
- spring mvc 表单标签
- linux:文件描述符重定向dup&dup2
- Processing编程【3】
- C++ new 与 delete 关键字
- Unity3d中UI开发的MVC模式
- shell 递归求阶乘