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>
運行結果如下。