zoukankan      html  css  js  c++  java
  • struts2入门之struts2获取表单数据

    在上一篇博文中分享了action如何获取表单数据,在本篇博文中分享一下用struts2这个框架如何来获取表单数据。

    struts2获取表单数据可以分为三种方式:

    1、属性封装

    2、模型驱动封装

    3、表达式封装

    分别介绍以上三种方式:

      属性封装的步骤:首先在action中定义成员变量,并写set方法(这里为了避免和后面的混淆,把get和set方法都写上得了),然后该action要访问的form表单中的属性值要和定义的成员变量名称一样,在action访问到jsp页面时,form表单中的数据都已经拿到了,下面show my code:

    action代码:

     1 package com.cczhao.struts.form;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 /**
     6  * 功能: TODO 当点击表单提交的时候访问Action,表单中的userName,passWord,address数据都可以获取到.<br/>
     7  * date: 2017年6月25日 上午8:44:17 <br/>
     8  *
     9  * @author cczhao
    10  * @version
    11  * @since JDK 1.8
    12  */
    13 public class Form1Demo extends ActionSupport {
    14 
    15     private static final long serialVersionUID = 1L;
    16     // 声明的成员变量的名称要和form表单中的数据的name属性值相同
    17     private String userName;
    18     private String passWord;
    19     private String address;
    20 
    21     public String execute() throws Exception {
    22         return "success";
    23     }
    24 
    25     public String getUserName() {
    26         return userName;
    27     }
    28 
    29     public void setUserName(String userName) {
    30         this.userName = userName;
    31     }
    32 
    33     public String getPassWord() {
    34         return passWord;
    35     }
    36 
    37     public void setPassWord(String passWord) {
    38         this.passWord = passWord;
    39     }
    40 
    41     public String getAddress() {
    42         return address;
    43     }
    44 
    45     public void setAddress(String address) {
    46         this.address = address;
    47     }
    48 }

    hello.jsp代码:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <form action="${pageContext.request.contextPath }/form1.action"
    11         method="post">
    12         userName:<input type="text" name="userName" /><br /> passWord:<input
    13             type="text" name="passWord" /><br /> address:<input type="text"
    14             name="address" /><br /> <input type="submit" value="提交" />
    15     </form>
    16 </body>
    17 </html>

    struts.xml配置如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <package name="formDemo" extends="struts-default" namespace="/">
     7         <action name="form1" class="com.cczhao.struts.form.Form1Demo">
     8             <result name="success">/hello.jsp</result>
     9         </action>
    10     </package>
    11 </struts>

       模型驱动封装可以直接把表单中的数据封装到一个实体对象中,步骤如下,

      首先需要有一个实体类: 

     1 package com.cczhao.struts.bean;
     2 
     3 public class User {
     4     private String userName;
     5     private String passWord;
     6     private String address;
     7 
     8     public String getUserName() {
     9         return userName;
    10     }
    11 
    12     public void setUserName(String userName) {
    13         this.userName = userName;
    14     }
    15 
    16     public String getPassWord() {
    17         return passWord;
    18     }
    19 
    20     public void setPassWord(String passWord) {
    21         this.passWord = passWord;
    22     }
    23 
    24     public String getAddress() {
    25         return address;
    26     }
    27 
    28     public void setAddress(String address) {
    29         this.address = address;
    30     }
    31 
    32     @Override
    33     public String toString() {
    34         return "User [userName=" + userName + ", passWord=" + passWord + ", address=" + address + "]";
    35     }
    36 
    37 }

        然后,jsp页面中form表单中的要填写的数据和上面定义的实体类的成员变量要一致,即名称要一样,当然不一样也不会报错,只是你后面获取不到这部分数据罢了,jsp代码如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <form action="${pageContext.request.contextPath }/form2.action"
    11         method="post">
    12         userName:<input type="text" name="userName" /><br /> passWord:<input
    13             type="text" name="passWord" /><br /> address:<input type="text"
    14             name="address" /><br /> <input type="submit" value="提交" />
    15     </form>
    16 </body>
    17 </html>

        接下来就是action部分代码:

     1 package com.cczhao.struts.form;
     2 
     3 import com.cczhao.struts.bean.User;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 import com.opensymphony.xwork2.ModelDriven;
     6 
     7 /**
     8  * 
     9  * 功能: TODO 用模型驱动封装的方式来获取表单数据.<br/>
    10  * date: 2017年6月25日 上午8:56:28 <br/>
    11  *
    12  * @author cczhao
    13  * @version
    14  * @since JDK 1.8
    15  */
    16 public class Form2Demo extends ActionSupport implements ModelDriven<User> {
    17 
    18     private static final long serialVersionUID = 1L;
    19     /**
    20      * 具体步骤: 1、在acton中创建实体类对象 2、写这个对象的set和get方法
    21      * 3、核心是通过实现ModelDriven这个接口中的getModel()方法,来获取表单对象数据
    22      */
    23     private User user = new User();
    24 
    25     @Override
    26     public User getModel() {
    27         return user;
    28     }
    29 
    30     public String execute() throws Exception {
    31         System.out.println(user);
    32         return "success";
    33     }
    34 
    35     public User getUser() {
    36         return user;
    37     }
    38 
    39     public void setUser(User user) {
    40         this.user = user;
    41     }
    42 
    43 }

       struts.xml文件和上面的一样只需要把action标签中的name属性值改成form表单中请求的action名称即可。

      表达式封装也是现在我正在用的一种方式,这种方式也需要有一个实体类User,和上面一样,action的代码如下:

     1 package com.cczhao.struts.form;
     2 
     3 import com.cczhao.struts.bean.User;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 /**
     7  * 
     8  * 功能: TODO 表达式封装也可以直接把表单中的数据直接封装到实体对象中去,步骤如下:.<br/>
     9  * 1、action中声明一个实体对象(只是声明)<br/>
    10  * 2、写这个对象的get和set方法 <br/>
    11  * 3、form表单中不能像以前那样直接写属性名称了,要写成对象.属性名(user.useName)<br/>
    12  * date: 2017年6月25日 上午9:17:27 <br/>
    13  *
    14  * @author cczhao
    15  * @version
    16  * @since JDK 1.8
    17  */
    18 public class Form3Demo extends ActionSupport {
    19 
    20     private static final long serialVersionUID = 1L;
    21     private User user;
    22 
    23     public String execute() throws Exception {
    24         System.out.println(user);
    25         return "success";
    26     }
    27 
    28     public User getUser() {
    29         return user;
    30     }
    31 
    32     public void setUser(User user) {
    33         this.user = user;
    34     }
    35 
    36 }

       jsp代码如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 <h1>厉害了,word 哥。。。。</h1>
    11 <form action="${pageContext.request.contextPath }/form3.action"
    12         method="post">
    13         userName:<input type="text" name="user.userName" /><br /> passWord:<input
    14             type="text" name="user.passWord" /><br /> address:<input type="text"
    15             name="user.address" /><br /> <input type="submit" value="提交" />
    16     </form>
    17 </body>
    18 </html>

     ======================================================================================

    总结:属性封装只能获取表单中各个属性的值,如果需要封装到对象中,还需手动setValue();但是模型驱动封装和表达式封装可以将form表单中的数据封装到实体对象中,在实际的开发项目中可能更实用点。但是,这以上三种获取表单数据的方式,不能混合使用。

    ---------------------分割线------------------------

    拓展一下,利用struts2可以封装实体对象,也可以封装成list集合或者map集合。

  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7076144.html
Copyright © 2011-2022 走看看