十一、Sturts2其他细节 -- 数据回显与模型驱动(三)

一、Struts2 数据回显

	所谓的数据回显技术就是,
	struts的表单项标签s:textField标签自动从栈中取回。
	
	(垃圾技术。。。。)


1.1 数据回显的实现
	
	action:
				public String register() {
		
						//模拟数据
						UserEntity user=new UserEntity();
						user.setName("小白");
						user.setPwd("123");
						
						//放入栈顶
						ActionContext ac = ActionContext.getContext();
						ValueStack vs = ac.getValueStack();
						vs.push(user);
						
						return "success";
				}
	
	index.jsp:
				<s:form action="./user_register" method="post" theme="simple">
					用户名:<s:textfield name="name"></s:textfield>
			
					密码:<s:textfield name="pwd"></s:textfield>
					生日:<s:textfield name="birth"></s:textfield>
					<s:submit value="提交"></s:submit>
				</s:form>
	    
	action跳转到index.jsp。action中放入栈顶的user对象会自动填充到
	index.jsp表单中。
1.2 数据回显的原理
	<s:form action="./user_register" method="post" theme="simple">
		用户名:<s:textfield name="name"></s:textfield>

		密码:<s:textfield name="pwd"></s:textfield>
		生日:<s:textfield name="birth"></s:textfield>
		<s:submit value="提交"></s:submit>
	</s:form>

    <s:textfield name="name"></s:textfield>
    
    这个标签会自动从值栈对象的list集合中取值,
    通过name值与list栈中对象的属性进行匹配。
    
1.3 数据回显案例
===>> UserAction.java
public class UserAction extends ActionSupport{

	
	
	public String register() {
		
		//模拟数据
		UserEntity user=new UserEntity();
		user.setName("小白");
		user.setPwd("123");
		
		//放入栈顶
		ActionContext ac = ActionContext.getContext();
		ValueStack vs = ac.getValueStack();
		vs.push(user);
		
		return "success";
	}
}
===>> struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="xxxx" extends="struts-default">
    	
    	
    	<action name="user_*" class="org.jsft.demo.UserAction" method="{1}">
    		<result name="success">/index.jsp</result>
    	</action>
        

    </package> 
</struts>

===>> index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@taglib uri="/struts-tags" prefix="s" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>Insert title here</title>

</head>
<body>
	
	<s:debug></s:debug>
	<s:property value="user"/>
	
	
	<!-- 表单 -->
	<s:form action="./user_register" method="post" theme="simple">
		用户名:<s:textfield name="name"></s:textfield>

		密码:<s:textfield name="pwd"></s:textfield>
		生日:<s:textfield name="birth"></s:textfield>
		<s:submit value="提交"></s:submit>
	</s:form>


</body>
</html>
===>> 测试

直接访问

		http://localhost:8080/struts4/user_register

在这里插入图片描述

二、Struts2 模型驱动

2.1 模型驱动的作用
	有些控制器是不代表任何模型对象,即控制器不和实体进行绑定。
	所以struts提供了模型驱动,

	目的就是为了实现控制器与入参对象的解耦。

在这里插入图片描述

2.2 模型驱动的原理
	模型驱动的实现是由于ModelDriven 拦截器。
	
	
	1.当用户访问action对象时,就会把action对象创建出来,
	  然后进入拦截器栈。
	  
	2.首先ModelDriven拦截器会调用action对象的getModel()方法,
	  将getModel()返回的实例压入栈顶。
	  
	3.然后Parameters拦截器将请求的表单字段
	  映射到 ValueStack 栈的栈顶对象的各个属性中。
	  
	  注意:
		  由于此时ValueStack 栈的栈顶对象是刚刚被压入的模型对象,所以该模型就被填充。
		  如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象.
	  
	  	  一个模型类必须有一个不带任何参数的构造器.

2.3 模型驱动案例
===>> UserAction.java
public class UserAction extends ActionSupport implements ModelDriven<UserEntity>{
	
	private UserEntity userEntity=new UserEntity();
	
	/**
	 * 	1.通过值栈对象操作list集合
	 * @return
	 */
	public String demo() {
		
		return "index";
	}

	@Override
	public UserEntity getModel() {
		return userEntity;
	}


}

===>> struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="xxxx" extends="struts-default">
    	
    	<global-results>
    		<result name="input">/register.jsp</result>
    	</global-results>
    	
    	<action name="demo" class="org.jsft.demo.UserAction" method="demo">
    		<result name="index">/index.jsp</result>
    	</action>
        

    </package> 
</struts>

===>> register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@taglib uri="/struts-tags" prefix="s" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>Insert title here</title>

</head>
<body>

	
	<!-- 表单 -->
	<form action="./demo" method="get">
		用户名:<input type="text" name="name"><br/>
		密码:<input type="password" name="pwd" ><br/>
		<input type="submit" value="提交">
	</form>
</body>
</html>
===>> index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"   prefix="s"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<style  type="text/css">

	
</style>

<body>

	<!-- struts数据回显 -->
	<s:form action="./index"  method="post" theme="simple">
		用户名:<s:textfield  name="name"></s:textfield><br/>
		密码:<s:password  name="pwd"></s:password><br/>
		<s:submit value="提交"></s:submit>
	</s:form>
	
</body>
</html>

测试:

	首先访问register.jsp。然后register.jsp会自动跳转到demo。然后
	再由demo跳转到index.jsp。
	此时register.jsp输入的数据会自动在index.jsp页面显示。
	这是由于模型驱动和数据回显的共同作用。
	

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值