ValueStack----数据回显的实现

ValueStack对象

ValueStack, 即值栈对象。

值栈对象:

是整个struts数据存储的核心,或者叫中转站。

用户每次访问strutsaction,都会创建一个Action对象、值栈对象、ActionContext对象;  

然后把Action对象放入值栈中; 

最后再把值栈对象放入request中,传入jsp页面。

(key: struts.valueStack)

开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。 (ActionContext是给开发者用的,便于学习与使用。)


OgnlContextValueStack对象的关系?

每个ActionContext都会对应一个ValueStack,

Action对象放入值栈中,而ActionContext创建的实例对象其实就是一个OgnlContext.

OgnlContext就是一个上下文对象的Map,  Struts标签默认使用OGNL方式。

每个Action对象的实例都会有一个ValueStack值栈对象,这个对象贯穿Action的整个生命周期。


每一次Struts2接受的奥一个action请求时,会第一时间创建一个值栈对象,但是不会马上调用Action()方法,而是将Action中对应的属性放到值栈的顶层节点。

值栈是OGNL的根,所以我们使用OGNL访问Action的属性时可以省略#,直接获取。


数据回显:

这里我们项实现的是访问一个action,然后跳转到一个login.jsp界面,然后登录表单中实现数据回显。

方法一:我们可以利用ActionContext对象获取request集合,然后将数据存入其中,然后在页面中取出来。

首先我们建立一个活动UserAction

import java.util.Map;

import cn.itcast.validation.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class UserAction extends ActionSupport{

	public String viewUpdata(){
		User userInfo=new User();
		userInfo.setUserName("张三");
		userInfo.setPwd("123456");
		ActionContext context=ActionContext.getContext();
		Map<String,Object> request=(Map<String,Object>)context.get("request");
		request.put("userInfo", userInfo);

		return "viewUpdata";
		
	}
}

然后对活动进行注册~(此处省略了在web.xml配置struts2的核心过滤器)

<struts>
   <package name="databack" extends="struts-default" >
    <action name="user_*" class="cn.itcast.databack.UserAction" method="{1}">
     <result name="viewUpdata">/viewUpdata.jsp</result>
    </action>
   </package>
</struts>

最后是我们要进行数据回显的界面viewUpdate.jsp

<body>
  <%@taglib uri="/struts-tags" prefix="s" %>
  <s:form action="#">
    <s:textfield name="user.userName" value="%{#request.userInfo.userName}" label="用户名"></s:textfield>
    <s:textfield name="user.pwd" value="%{#request.userInfo.pwd}" label="密码"></s:textfield>  
  </s:form> 
 </body>

我们访问 user_viewUpdate 得到数据回显后的界面~


方法二:使用值栈 ValueStack

相比起获取request的map往其中存值,再取值,使用值栈就显得方便多了,我们一起来看看。

步骤一:依旧是UserAction的活动界面

public class UserAction extends ActionSupport{

	public String viewUpdata(){
		User userInfo=new User();
		userInfo.setUserName("张三");
		userInfo.setPwd("123456");
		ValueStack vs=ActionContext.getContext().getValueStack();  //获取值栈对象
		vs.push(userInfo);    //将需要回显的数据对象入栈
		
		return "viewUpdata";		
	}
}


步骤二:活动的配置同上,(此处省略)


步骤三:在界面中获取回显的数据 (必须注意的是,一定要使用struts标签

<body>
  <%@taglib uri="/struts-tags" prefix="s" %>
    <s:form  action="#">
       用户名:<s:textfield name="userName" ></s:textfield>    //name值要与回显数据的名称相对应
        密码:<s:textfield name="pwd"></s:textfield>  
       <input type="submit" value="提交">
    </s:form> 
</body>

运行出来同样可以实现数据的回显~







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值