[转帖struts2学习笔记之action传值方式_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4026 | 回复: 0   主题: [转帖struts2学习笔记之action传值方式        下一篇 
zxl1990
注册用户
等级:上尉
经验:663
发帖:59
精华:1
注册:2012-12-19
状态:离线
发送短消息息给zxl1990 加好友    发送短消息息给zxl1990 发消息
发表于: IP:您无权察看 2012-12-21 13:24:28 | [全部帖] [楼主帖] 楼主

1、字段驱动方式

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

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

UserAction.java


Java代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. public class UserAction { 
  2.       
  3.        private String username; 
  4.       
  5.        private String password; 
  6.       
  7.        public String getUsername() { 
  8.              return username; 
  9.        } 
  10.       
  11.        public void setUsername(String username) { 
  12.              this.username = username; 
  13.        } 
  14.        public String getPassword() { 
  15.              return password; 
  16.        } 
  17.        public void setPassword(String password) { 
  18.              this.password = password; 
  19.        } 
  20.       
  21.        public String execute() throws Exception { 
  22.             
  23.              System.out.print(username+"--------"+password); 
  24.             
  25.              // 只有用户名为001,密码为123456方可成功登陆 
  26.             
  27.              if (username.equals("001") && password.equals("123456")) { 
  28.                    return "success"; 
  29.              } else { 
  30.              return "error"; 
  31.        } 
  32.  } 


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*()的方法来获取模型,其中“*”代表具体的模型对象。

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

Java代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. package com.company.login; 
  2. public class User { 
  3.        private String username; 
  4.        private String password; 
  5.        
  6.        public String getUsername() { 
  7.              return username; 
  8.        } 
  9.        public void setUsername(String username) { 
  10.              this.username = username; 
  11.        } 
  12.        public String getPassword() { 
  13.              return password; 
  14.        } 
  15.        public void setPassword(String password) { 
  16.              this.password = password; 
  17.        } 
  18.        
  19.       


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类型的域模型:

Java代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. public class LoginAction extends ActionSupport { 
  2.        private static final long serialVersionUID = 1030294046920869257L; 
  3.        private User user; 
  4.        
  5.        public User getUser() { 
  6.              return user; 
  7.        } 
  8.       
  9.        public void setUser(User user) { 
  10.              this.user = user; 
  11.        } 
  12.       
  13.        // 处理用户请求的execute方法 
  14.        public String execute() throws Exception { 
  15.              if (isInvalid(user.getUsername())) 
  16.              return INPUT; 
  17.              
  18.              if (isInvalid(user.getPassword())) 
  19.              return INPUT; 
  20.              
  21.              
  22.              // 只有用户名为001,密码为123456方可成功登陆 
  23.              if (user.getUsername().equals("001") && user.getPassword().equals("123456")) { 
  24.                    // 通过ActionContext对象访问Web应用的Session 
  25.                    ActionContext context = ActionContext.getContext(); 
  26.                    context.getSession().put("user", user.getUsername()); 
  27.                    context.getSession().put("password", user.getPassword()); 
  28.                    System.out.println(user.getUsername() + "----" + user.getPassword()); 
  29.                    return "success"; 
  30.              } else { 
  31.              return "error"; 
  32.        } 
  33.       
  34.  } 


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:


Html代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. <%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="s"uri="/struts-tags"%>
  3. <%   
  4.     String path = request.getContextPath();   
  5.     String basePath = request.getScheme() + "://"   
  6.     + request.getServerName() + ":" + request.getServerPort()   
  7.             + path + "/";   
  8. %>
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  10. <html>
  11. <head>
  12. <basehref="<%=basePath%>">
  13. <title><s:textname="login.jsp"/>
  14. </title>
  15. </head>
  16. <body>
  17. <s:formaction="loginAction"namespace="/login">
  18. <s:textfieldname="user.username"label="账户"></s:textfield>     
  19. <s:passwordname="user.password"label="密码"></s:password>     
  20. <s:submitvalue="登录"/>     
  21. <table>               
  22. </s:form>
  23. </body>
  24. </html>


<%@ 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:


Html代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. <%@ taglib prefix="s"uri="/struts-tags" %>     
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">     
  3. <html>     
  4. <head>     
  5. <title>成功页面</title>     
  6. </head>     
  7.         
  8. <body>     
  9. <palign="center">登陆成功!!!您的用户名是<s:propertyvalue="user.username"></s:property></p>     
  10. </body>

<%@ 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>



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




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论