`
胡笨笨
  • 浏览: 159660 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

struts2学习笔记之action传值方式

阅读更多

 

1、字段驱动方式

所谓字段驱动方式就是通过字段进行数据传递。在Struts2中我们可以直接在Action里定义各种Java基本类型的字段,使这些字段与表单数据相对应,并利用这些字段进行数据传递。

前几篇中提到的struts2例子,用的就是字段驱动方式。

UserAction.java

 public class UserAction {  

     private String username;  

     private String password;  

     public String getUsername() {  
         return username;  
     }  

     public void setUsername(String username) {  
         this.username = username;  
     } 
     public String getPassword() {  
         return password;  
     }  
     public void setPassword(String password) {  
         this.password = password;  
     }  

     public String execute() throws Exception {  

         System.out.print(username+"--------"+password);  

         // 只有用户名为001,密码为123456方可成功登陆  

         if (username.equals("001") && password.equals("123456")) {  
             return "success";  
         } else {  
             return "error";  
         }  
     }  
 } 
  

这个Action中的定义了两个字符串字段"username”和"password”,这两个字段分别对应登陆页面上的“用户名”和“密码”两个表单域。

 

2、模型驱动方式

所谓模型驱动方式是指通过JavaBean模型进行数据传递。采用这种方式,JavaBean所封装的属性与表单的属性一一对应,JavaBean将成为数据传递的载体。使用模型驱动方式,Action类通过get*()的方法来获取模型,其中“*”代表具体的模型对象。

首先,我们创建一个模型:

package com.company.login;

public class User {
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	

}
  

接下来定义Action类,两个字段已经不再单独定义,而是定义一个User类型的域模型:

public class LoginAction extends ActionSupport {  
    private static final long serialVersionUID = 1030294046920869257L;  
    private User user;
  
    public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	// 处理用户请求的execute方法    
	  public String execute() throws Exception {  
		  if (isInvalid(user.getUsername()))  
		      return INPUT;  
		
		      if (isInvalid(user.getPassword()))  
		          return INPUT;  
		
		     		      
		      // 只有用户名为001,密码为123456方可成功登陆  
		      if (user.getUsername().equals("001") && user.getPassword().equals("123456")) {  
		    	// 通过ActionContext对象访问Web应用的Session  
			    	ActionContext context  =  ActionContext.getContext();
			    	context.getSession().put("user", user.getUsername());
			    	context.getSession().put("password", user.getPassword());
			    	System.out.println(user.getUsername() + "----" + user.getPassword());  
		            return "success";  
		        } else {  
		            return "error";  
		        }  

	  } 

  

在使用模型驱动传值的时候需要注意,如果JSP页面是负责取值的,那么取值的格式必须为“模型对象名.属性名”;如果JSP页面是负责传值的,那么传值的格式可以为“模型对象名.属性名”,也可以直接是“属性名”。

接下来对登陆页和成功页进行改动:

login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
	+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title><s:text name="login.jsp" />
		</title>
	</head>
	<body>
		<s:form action="loginAction" namespace="/login">
	            <s:textfield name="user.username" label="账户" ></s:textfield>  
                <s:password name="user.password"  label="密码"  ></s:password>  
                <s:submit value="登录"/>  
        <table>            
		</s:form>
	</body>
</html>
 
 

success.jsp:

 
 <%@ taglib prefix="s" uri="/struts-tags" %>  

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

 <html>  

   <head>  

     <title>成功页面</title>  

   </head>  

      

   <body>  

     <p align="center">登陆成功!!!您的用户名是<s:property value="user.username"></s:property></p>  

   </body>  

  

这样就完成了模型驱动传值.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics