Action实现数值传递主要有两种方式: 一是字段驱动方式(Field-driven); 二是模型驱动方式(Model-driven)。
1 字段驱动方式
在Action中定义各种Java基本类型的字段,这些字段与表单数据相对应,并利用这些字段进行数据传递。
Action代码:
package com.user;
public class UserAction {
private String username;
private String password;
public String getUsername() {
return this.password;
}
public String getPassword() {
return this.password;
}
public String setUsername(String username) {
this.username = username;
}
public String setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
if (username.equals("admin") && password.equals("123456") {
return SUCCESS;
} else {
return ERROR;
}
}
}
Login.jsp代码:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<center>
<s:from action="loginUser">
<s:textfield name="username" label="用户名"/>
<s:textfield name="password" label="口令"/>
<s:submit value="确定"/>
<s:reset value="重置"/>
</s:from>
</center>
</body>
</html>
success.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>成功页面</title>
</head>
<body>
<p align="center">
<s:property vlaue="username"/>登录成功!
</p>
</body>
</html>
error.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>失败页面</title>
</head>
<body>
<p align="center">
<s:property vlaue="username"/>登录失败!
</p>
</body>
</html>
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="com" extends="struts-default"> <action name="loginUser" class="com.user.UserAction"> <result name="success">/jsp/success.jsp</result> <result name="error">/jsp/error.jsp</result> </action> </package> </struts>
在userAction中定义了两个字符串类型字段“username”和“password”,这两个字段分别与登录页面中的“用户名”和“口令”两个表单域相对应。在实际应用中,登录页面所提交的表单数据被各自映射到对应Action中的字段。由此Action获得了外界传入的数据。
2 模型驱动方式
模型驱动是指通过JavaBean模型进行数据传递。采用这种方式,JavaBean所封装的属性与表单数据的属性一一对应,JavaBean将成为数据传递的载体。
User.java
package com.user;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
UserAction.java
package com.user;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
if (user.username.equals("admin") && user.password.equals("123456")) {
return SUCCESS;
} else {
return ERROR;
]
}
}
login.jsp
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<center>
<s:from action="loginUser">
<s:textfield name="user.username" label="用户名"/>
<s:textfield name="user.password" label="口令"/>
<s:submit value="确定"/>
<s:reset value="重置"/>
</s:from>
</center>
</body>
</html>
success.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>成功页面</title>
</head>
<body>
<p align="center">
<s:property vlaue="user.username"/>登录成功!
</p>
</body>
</html>
JSP页面是负责取值的,取值的格式必须为“模型对象名.属性名”;JSP页面是负责传值的,那么传值的格式可以为“模型对象名.属性名”,也可以直接是“属性名”。