1、字段驱动方式
所谓字段驱动方式就是通过字段进行数据传递。在Struts2中我们可以直接在Action里定义各种Java基本类型的字段,使这些字段与表单数据相对应,并利用这些字段进行数据传递。
前几篇中提到的struts2例子,用的就是字段驱动方式。
UserAction.java
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";
- }
- }
- }
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代码



- 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;
- }
-
-
- }
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代码



- 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";
- }
-
- }
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代码



- <%@ 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>
- <basehref="<%=basePath%>">
- <title><s:textname="login.jsp"/>
- </title>
- </head>
- <body>
- <s:formaction="loginAction"namespace="/login">
- <s:textfieldname="user.username"label="账户"></s:textfield>
- <s:passwordname="user.password"label="密码"></s:password>
- <s:submitvalue="登录"/>
- <table>
- </s:form>
- </body>
- </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代码



- <%@ taglib prefix="s"uri="/struts-tags" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>成功页面</title>
- </head>
-
- <body>
- <palign="center">登陆成功!!!您的用户名是<s:propertyvalue="user.username"></s:property></p>
- </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>
这样就完成了模型驱动传值.