版权声明:程序猴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>
启动程序进行测试: