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集合。

  • 相关阅读:
    从O(n^3) 到 O(n)求最大连续和
    冲刺博客NO.6
    冲刺博客NO.5
    冲刺博客NO.4
    冲刺博客NO.3
    冲刺博客NO.2
    冲刺博客NO.1
    结对开发:四则运算(网页版)
    课堂作业3
    软件工程概论02~ 四则运算
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7076144.html
Copyright © 2011-2022 走看看