Struts2框架(三)

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>

運行結果如下。

轉存失敗重新上傳取消

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章