众妙之门

业精于勤,荒于嬉;行成于思,毁于随

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、Action接受参数的方式

1、属性方式接收

首先编写一个用于上传参数的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="Login.action" method="post">
  <table>
    <tr>
      <td>用户名:</td><td><input type="text" name="username"></td>
    </tr>
    <tr>
      <td>密码:</td><td><input type="password" name="password"></td>
    </tr>
    <tr>
      <td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
    </tr>
  </table>
</form>
</body>
</html>

action的xml配置

        <action name="Login" class="LoginAction">
            <result name="success">/WEB-INF/jsp/success.jsp</result>
            <result name="login">/index.jsp</result>
        </action>

此form的“action”的值必须和xml配置的acting的“name”一样,input的“name”的值和LoginAction的属性名一致

成功跳转的页面

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

使用的EL表达式也要和action类的属性名称一致

action类代码

public class LoginAction extends ActionSupport {

    private String username;//用户名-必须与页面请求的对应表单name值相同

    private String password;//密码-必须与页面请求的对应表单name值相同

    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;
    }


    @Override
    public String execute() throws Exception {
        if (username.equals("admin") && password.equals("123456")) {
            return SUCCESS;
        } else {
            return LOGIN;
        }
    }
}

必须要设置属性的get,set方法

2、使用JavaBean方式接收

请求页面

<form action="JavaBean.action" method="post">
    <table>
        <tr>
            <td>用户名:</td><td><input type="text" name="user.loginName"></td>
        </tr>
        <tr>
            <td>密码:</td><td><input type="password" name="user.password"></td>
        </tr>
        <tr>
            <td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
        </tr>
    </table>
</form>

aciton配置

        <action name="JavaBean" class="UserAction">
            <result name="success">/WEB-INF/jsp/success1.jsp</result>
            <result name="login">/index1.jsp</result>
        </action>

JavaBean代码

public class User {
    private String loginName;

    private String password;

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassword() {
        return password;
    }

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

action类代码

public class UserAction extends ActionSupport {
    private User user;//JavaBean对象-提交页面的user.loginname表示此属性名及此对象的内部属性名

    @Override
    public String execute() throws Exception {
        System.out.println(this.user.getLoginName() + "|" + this.user.getPassword());
        if ("admin".equals(user.getLoginName()) && "123456".equals(user.getPassword())) {
            return SUCCESS;
        } else {
            return LOGIN;
        }
    }

    //必须设置get和set方法
    public User getUser() {
        return user;
    }

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

请求成功页面

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

3、使用ModelDriven方式接收参数

请求页面

<form action="ModelDriven.action" method="post">
    <table>
        <tr>
            <td>用户名:</td><td><input type="text" name="loginName"></td>
        </tr>
        <tr>
            <td>密码:</td><td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
        </tr>
    </table>
</form>

使用ModelDriven可以直接使用javabean的属性名称

action配置

        <action name="ModelDriven" class="ModelDrivenAction">
            <result name="success">/WEB-INF/jsp/success2.jsp</result>
            <result name="login">/index2.jsp</result>
        </action>

action类代码(JavaBean代码同上略)

public class ModelDrivenAction extends ActionSupport implements ModelDriven<User> {
    private User user;

    @Override
    public User getModel() {
        //先支持此方法赋值,ModelDriven是通过getModel方法获取action中JavaBean对象,然后将用户提交数据赋值到此对象内
        //必须手动创建javabean对象,不需要设置get,set放过
        user = new User();
        user.setLoginName("测试");
        return user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(this.user.getLoginName() + "|" + this.user.getPassword());
        if ("admin".equals(user.getLoginName()) && "123456".equals(user.getPassword())) {
            return SUCCESS;
        } else {
            return LOGIN;
        }
    }
}

请求成功页面及输出结果

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

二、action的method属性

1、一个acton可以配置多个方法,此时可以通过配置action的method属性来调用action类的不同方法

action配置

        <action name="UserAdd" class="UserAction" method="addUser">
            <result>/index1.jsp</result>
        </action>

        <action name="UserDel" class="UserAction" method="delUser">
            <result>/index1.jsp</result>
        </action>

action类

public class UserAction extends ActionSupport {
    public String addUser(){
        System.out.println("addUser");
        return SUCCESS;
    }

    public String delUser(){
        System.out.println("delUser");
        return SUCCESS;
    }
}

请求页面

<form action="UserAdd.action" method="post">
    <input type="submit" value="登录">
</form>
<form action="UserDel.action" method="post">
    <input type="submit" value="登录">
</form>

2、动态方法调用

动态调用需要设置struts2的参数

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

如果是struts2.5的版本还需要设置global-allowed-methods

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>

    <package name="default" namespace="/" extends="struts-default">
        <global-allowed-methods>regex:.*</global-allowed-methods>

        <action name="User" class="UserAction">
            <result>/index1.jsp</result>
        </action>
    </package>
</struts>

请求页面

<form action="User!addUser.action" method="post">
    <input type="submit" value="添加">
</form>
<form action="User!delUser.action" method="post">
    <input type="submit" value="删除">
</form>

action类同上略

三、使用通配符配置action

请求页面

<form action="User_addUser.action" method="post">
    <input type="submit" value="添加">
</form>
<form action="User_delUser.action" method="post">
    <input type="submit" value="删除">
</form>
<form action="User_other.action" method="post">
    <input type="submit" value="删除">
</form>

action配置

        <!--优先完全匹配,找不到才回去通配符匹配-->
        <action name="User_addUser" class="UserAction">
            <result>/index1.jsp</result>
        </action>

        <action name="User_*" class="UserAction" method="{1}">
            <result>/index1.jsp</result>
        </action>

 

 

 

posted on 2019-07-10 14:42  xuanm  阅读(857)  评论(0编辑  收藏  举报