action获取表单提交数据
在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样。下面所有实例都是以登录页面为例进行讲解。
为了能够顺利完成这部分的内容,大家要准备如以下几个工作。
1、数据库类的创建(https://mp.csdn.net/console/editor/html/105462490)
2、数据表的实体类的创建(https://mp.csdn.net/console/editor/html/105462490)
3、数据表的业务类的创建(https://mp.csdn.net/console/editor/html/105462574)
在业务类中要添加以下检测用户的方法,代码如下。
/**
* 该方法用于检测指定的用户名和密码是否存在若存在返回true,否则返回fase
* @param name 要检测的用户名
* @param pass 要检测的密码
* @return 若用户存在则返回true,否则返回false
*/
public static boolean checkUser(String name,String pass){
//定义要执行的sql命令
String sql="select id,name,pass from login where name=? and pass=?";
//设置命令参数值
Object[] para=new Object[]{new String(name),new String(pass)};
//创建数据表的实体类的对象
LoginEntity login=new LoginEntity();
//调用数据库类DataConnection中的query()方法返回数据集
List<LoginEntity> list= new DataConnection().query(login.getClass(), sql, para);
if(list.size()>0){
return true;
}else{
return false;
}
}
一、属性驱动
1、直接在Action类中定义成员属性来接收请求参数 (将Action当成javaBean),在Action中还需要定义成员属性的setter方法。
(1)、创建一个登录表单login.html,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="js/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="js/themes/icon.css">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
$(function(){
//在这里编写jquery easyui的代码
$('#ff').dialog({
title: '登录界面',
width: 300,
height: 160,
closed: false,
cache: false,
modal: true,
buttons:[{
text:'登录',
handler:function(){
$('#ff').form('submit', {
url:"login", //这是Action的名称
onSubmit: function(){
if($("#name").val()=="") {
$.messager.alert('提示','用户名不能为空');
return false;
}
if($("#pass").val()=="") {
$.messager.alert('提示','用户密码不能为空');
return false;
}
},
success:function(data){
alert(data)
}
});
}
},{
text:'关闭',
handler:function(){
$.messager.alert('提示','你单击了关闭按钮');
}
}]
});
});
</script>
</head>
<body>
<form id="ff" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="name" name="name" /><!--这里的name一定要和Action类中定义的name属性要一样-->
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pass" name="pass" /><!--这里的pass一定要和Action类中定义的pass属性要一样-->
</tr>
</table>
</form>
</body>
</html>
(2)创建action,LoginAction.java文件的代码如下。
package action;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import bussiness.Blogin;
public class LoginAction extends ActionSupport {
private HttpServletResponse response;// 用于获取servlet中的请求对象。便于向客户反馈信息
private HttpServletRequest request;// 用于获取servlet中的请求对象。便于获取表单传送过来的各种数据,如删除或更新时传送过来的关键字id的值
private String name;//这个成员变量名要和表单中的用户输入域中的name一样,且要有get和set
private String pass; //这个成员变量名要和表单中的用户输入域中的pass一样,且要有get和set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public LoginAction(){//该构造方法用于初始化接收信息和输出信息的编码为utf-8,避免中文出现乱码
response=ServletActionContext.getResponse();//获取Response对象
request=ServletActionContext.getRequest();//获取Request对象
try {
request.setCharacterEncoding("utf-8");//设置接数据的编码为utf-8
response.setContentType("text/html;charset=utf-8");//设置输出编码为utf-8,以防出现乱码
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String execute() throws Exception {
if(Blogin.checkUser(name, pass)){
response.getWriter().println("登录成功");
}else{
response.getWriter().println("登录失败");
}
return null;
}
}
(3)struts.xml文件代码如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.LoginAction">
</action>
</package>
</struts>
运行程序,如下图所示。
2、直接将javaBean做为Action的属性,即用login数据表的实体类作为Action的属性
(1)、创建一个登录表单login.html,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="js/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="js/themes/icon.css">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
$(function(){
//在这里编写jquery easyui的代码
$('#ff').dialog({
title: '登录界面',
width: 300,
height: 160,
closed: false,
cache: false,
modal: true,
buttons:[{
text:'登录',
handler:function(){
$('#ff').form('submit', {
url:"login",
onSubmit: function(){
if($("#name").val()=="") {
$.messager.alert('提示','用户名不能为空');
return false;
}
if($("#pass").val()=="") {
$.messager.alert('提示','用户密码不能为空');
return false;
}
},
success:function(data){
alert(data)
}
});
}
},{
text:'关闭',
handler:function(){
$('#ff').dialog("close");
}
}]
});
});
</script>
</head>
<body>
<form id="ff" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="name" name="loginEntity.name" /><!--这里的loginEntity.name一定要和Action类中定义的loginEntity.name属性要一样-->
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pass" name="loginEntity.pass" /><!--这里的loginEntity.pass一定要和Action类中定义的loginEntity.pass属性要一样-->
</tr>
</table>
</form>
</body>
</html>
(2)创建action,LoginAction.java文件的代码如下。
package action;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import bussiness.Blogin;
import entity.LoginEntity;
public class LoginAction extends ActionSupport {
private HttpServletResponse response;// 用于获取servlet中的请求对象。便于向客户反馈信息
private HttpServletRequest request;// 用于获取servlet中的请求对象。便于获取表单传送过来的各种数据,如删除或更新时传送过来的关键字id的值
private LoginEntity loginEntity;//这个成员变量必须要有get和set,且和表单中的输入域名称要一样
public LoginEntity getLoginEntity() {
return loginEntity;
}
public void setLoginEntity(LoginEntity loginEntity) {
this.loginEntity = loginEntity;
}
public LoginAction(){//该构造方法用于初始化接收信息和输出信息的编码为utf-8,避免中文出现乱码
response=ServletActionContext.getResponse();//获取Response对象
request=ServletActionContext.getRequest();//获取Request对象
try {
request.setCharacterEncoding("utf-8");//设置接数据的编码为utf-8
response.setContentType("text/html;charset=utf-8");//设置输出编码为utf-8,以防出现乱码
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String execute() throws Exception {
if(Blogin.checkUser(loginEntity.getName(), loginEntity.getPass())){
response.getWriter().println("登录成功");
}else{
response.getWriter().println("登录失败");
}
return null;
}
}
(3)struts.xml文件代码如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.LoginAction">
</action>
</package>
</struts>
运行结果如下图所示。
3、模型驱动
(1)、创建一个登录表单login.html,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="js/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="js/themes/icon.css">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
$(function(){
//在这里编写jquery easyui的代码
$('#ff').dialog({
title: '登录界面',
width: 300,
height: 160,
closed: false,
cache: false,
modal: true,
buttons:[{
text:'登录',
handler:function(){
$('#ff').form('submit', {
url:"login",
onSubmit: function(){
if($("#name").val()=="") {
$.messager.alert('提示','用户名不能为空');
return false;
}
if($("#pass").val()=="") {
$.messager.alert('提示','用户密码不能为空');
return false;
}
},
success:function(data){
alert(data)
}
});
}
},{
text:'关闭',
handler:function(){
$('#ff').dialog("close");
}
}]
});
});
</script>
</head>
<body>
<form id="ff" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="name" name="loginEntity.name" /><!--这里的loginEntity.name一定要和Action类中定义的loginEntity.name属性要一样-->
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pass" name="loginEntity.pass" /><!--这里的loginEntity.pass一定要和Action类中定义的loginEntity.pass属性要一样-->
</tr>
</table>
</form>
</body>
</html>
(2)创建action,LoginAction.java文件的代码如下。
package action;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ModelDriven;
import bussiness.Blogin;
import entity.LoginEntity;
public class LoginAction implements ModelDriven {
private HttpServletResponse response;// 用于获取servlet中的请求对象。便于向客户反馈信息
private HttpServletRequest request;// 用于获取servlet中的请求对象。便于获取表单传送过来的各种数据,如删除或更新时传送过来的关键字id的值
private LoginEntity loginEntity=new LoginEntity();//在这里必须进行实例化
public LoginEntity getLoginEntity() {
return loginEntity;
}
public void setLoginEntity(LoginEntity loginEntity) {
this.loginEntity = loginEntity;
}
@Override
public Object getModel() {
// TODO Auto-generated method stub
return loginEntity;
}
public LoginAction(){
response=ServletActionContext.getResponse();//获取Response对象
request=ServletActionContext.getRequest();//获取Request对象
try {
request.setCharacterEncoding("utf-8");//设置接数据的编码为utf-8
response.setContentType("text/html;charset=utf-8");//设置输出编码为utf-8,以防出现乱码
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String execute() throws IOException{
if(Blogin.checkUser(loginEntity.getName(), loginEntity.getPass())){
response.getWriter().println("登录成功");
}else{
response.getWriter().println("登录失败");
}
return null;
}
}
(3)struts.xml文件内容如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.LoginAction">
</action>
</package>
</struts>
运行结果如下。