Struts2入门(四)Struts2参数传递

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/86688432

前言

     本章讲解Struts2的页面->Action的传递和Action->页面的传递方式

方法

1.概念

在servlet阶段,我们使用request.getParameter和setAttribute的方式进行数据的传递,在SpringMVC中我们使用了更为先进的参数传递方式,那么在讲解Struts2的数据传递方式后,我们可以自行去对比哪个容易一些!

2.Action接收页面传递参数的方式

1)属性方式

将要接收的属性设置为action的属性,并给予相应的get和set方法即可!

示例:使用action接收表单参数

编写表单页面如下:

<%--
  Created by IntelliJ IDEA.
  User: jwang
  Date: 2019/1/29
  Time: 12:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Struts2数据传递</title>
</head>
<body>
    <form action="login.action" method="post">
        姓名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="password"/><br/>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

编写action代码如下:

package cn.edu.ccut.action;


public class LoginAction {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String login(){
        System.out.println("username="+username+",password="+password);
        return "success";
    }
}

在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>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.edu.ccut.action.LoginAction" method="login">
            <result name="success">/test.jsp</result>
        </action>
    </package>
</struts>

编写登录成功页面test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Test</title>
</head>
<body>
    ${username}登录成功
</body>
</html>

我们进行一下测试,测试结果如下:

我们发现,成功的取到了值!

2)对象方式

上面的方式我们可以很明显的发现他的缺点,那就是一旦我的属性很多,那将是很难受的!

所以,struts还为我们提供了对象方式的接收。

使用前面Hibernate讲解时用到的User对象即可:

那么,我们的action和表单页面需要如下更改:

package cn.edu.ccut.action;


import cn.edu.ccut.bo.User;

public class LoginAction {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String login(){
        System.out.println("username="+user.getUsername()+",password="+user.getPassword());
        return "success";
    }
}
<%--
  Created by IntelliJ IDEA.
  User: jwang
  Date: 2019/1/29
  Time: 12:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Struts2数据传递</title>
</head>
<body>
    <form action="login.action" method="post">
        姓名:<input type="text" name="user.username"/><br/>
        密码:<input type="password" name="user.password"/><br/>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

我们运行一下系统查看结果:

我们发现,同样可以获得我们所需要的值!

3)模型方式

上面的方法我们同样可以发现一个致命的缺陷,一旦我们这个类的属性过多,那么表单的编写是十分的繁重!

所以我们又有了模型方式的数据传递。

action改变如下:

package cn.edu.ccut.action;


import cn.edu.ccut.bo.User;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction implements ModelDriven<User> {
    private User user;

    @Override
    public User getModel() {
        user = new User();
        return user;
    }
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String login(){
        System.out.println("username="+user.getUsername()+",password="+user.getPassword());
        return "success";
    }


}

 表单改变如下:

<%--
  Created by IntelliJ IDEA.
  User: jwang
  Date: 2019/1/29
  Time: 12:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Struts2数据传递</title>
</head>
<body>
    <form action="login.action" method="post">
        姓名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="password"/><br/>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

执行效果如下:

3.页面接收action传递参数的方式

首先我们将需要传递到页面上的参数设置为action的属性,并给予对应的set和get方法,和上面的三种方式类似!

如果我们需要获取对象方式传递到页面的数据的话可以使用el表达式进行接收!

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Test</title>
</head>
<body>
    ${user.username}登录成功
</body>
</html>

启动程序进行测试:

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/86688432