Struts2 action獲取數據的三種方式

根據上一片文章Struts2環境配置中的用戶登陸小例子記錄三種方式

用戶登陸界面
該用戶界面下面的$.post提交方式適合於下面介紹的1)2)兩種方式
(接收屬性和ModelDriven方式)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jslib/jquery-3.0.0.js"></script>
<script type="text/javascript">
    $(function(){
        $("[type='button']").click(function(){
            $.post("checkLogin",{userName:$("[name='user']").val(),pwd:$("[name='pwd']").val()},function(data){
                if(data=="1")
                {
                    $("#info").html("用戶名或者密碼錯誤,請重新輸入");
                }
                else
                {
                    location.href="main.jsp";
                }
            })
        })
    })
</script>
</head>
<body>
    <table>
        <tr><td>用戶名</td><td><input type="text" name="user"></td></tr>
        <tr><td>密碼</td><td><input type="password" name="pwd"></td></tr>
        <tr><td colspan="2"><input type="button" value="登陸"></td></tr>
    </table>
    <div id="info"></div>
</body>

</html>

$.post提交屬性到action用下面不同的3種方式來接收
1)繼承ModelDriven接口的方式

package action;

import java.io.PrintWriter;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import dao.UserDAO;
import model.User;

public class checkLoginAction extends ActionSupport implements ModelDriven<User>{
    private UserDAO dao = new UserDAO();
    private User user=new User();//定義並初始化一個模型
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        PrintWriter out = ServletActionContext.getResponse().getWriter();
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.setAttribute("USER", user);
        if(dao.checkLogin(user))
        {
            out.print("1");
        }
        return null;
    }
    //給模型添加屬性
    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }

}

2)接收屬性的方式

package action;

import java.io.PrintWriter;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import dao.UserDAO;
import model.User;

public class checkLoginAction extends ActionSupport{
    private UserDAO dao = new UserDAO();
    private String userName;
    private String pwd;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        PrintWriter out = ServletActionContext.getResponse().getWriter();
        HttpSession session = ServletActionContext.getRequest().getSession();
        User user = new User();
        user.setUserName(userName);
        user.setPwd(pwd);
        session.setAttribute("USER", user);
        if(dao.checkLogin(user))
        {
            out.print("1");
        }
        return null;
    }   
}

3)domain model方式(域模型)

與以上2種方式不同的是,這種方式需要在提交屬性的時候指定它的所屬對象,才能正確的封裝到該對象
如下$.post提交時需要提交的屬性是user.xxx屬性

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jslib/jquery-3.0.0.js"></script>
<script type="text/javascript">
    $(function(){
        $("[type='button']").click(function(){
        //提交屬性指定所屬對象
            $.post("checkLogin",{"user.userName":$("[name='user']").val(),"user.pwd":$("[name='pwd']").val()},function(data){
                if(data=="1")
                {
                    $("#info").html("用戶名或者密碼錯誤,請重新輸入");
                }
                else
                {
                    location.href="main.jsp";
                }
            })
        })
    })
</script>
</head>
<body>
    <table>
        <tr><td>用戶名</td><td><input type="text" name="user"></td></tr>
        <tr><td>密碼</td><td><input type="password" name="pwd"></td></tr>
        <tr><td colspan="2"><input type="button" value="登陸"></td></tr>
    </table>
    <div id="info"></div>
</body>

</html>
package action;

import java.io.PrintWriter;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import dao.UserDAO;
import model.User;

public class checkLoginAction extends ActionSupport{
    private UserDAO dao = new UserDAO();
    private User user;

    public User getUser() {
        return user;
    }
    //注入屬性
    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        PrintWriter out = ServletActionContext.getResponse().getWriter();
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.setAttribute("USER", user);
        if(dao.checkLogin(user))
        {
            out.print("1");
        }
        return null;
    }   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章