zoukankan      html  css  js  c++  java
  • struts接收表单数据的3种方式

    一、普通属性

    1.将Action类作为一个POJO,直接进行接收

    在Action类内部定义字段名称,并为之声明get/set方法。页面表单name属性与定义字段名称相同。
     

    1. package com.common.login;  
    2.   
    3. import com.opensymphony.xwork2.ActionSupport;  
    4.   
    5. @SuppressWarnings("serial")  
    6. public class LoginAction extends ActionSupport{  
    7.   
    8.     private String name;  
    9.     private String password;  
    10.       
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.       
    15.     public void setName(String name) {  
    16.         this.name = name;  
    17.     }  
    18.       
    19.     public String getPassword() {  
    20.         return password;  
    21.     }  
    22.       
    23.     public void setPassword(String password) {  
    24.         this.password = password;  
    25.     }  
    26.       
    27.     public void showInfo()  
    28.     {  
    29.         System.out.println("name:"+this.name+"  password"+this.password);  
    30.     }  
    31.       
    32. }  

    jsp页面代码

     

     在CODE上查看代码片派生到我的代码片
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <%@ taglib prefix="s" uri="/struts-tags" %>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6. <head>  
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    8. <title>Login Page</title>  
    9. </head>  
    10. <body>  
    11.     <form action="/struts_web/common/login!login" method="post">  
    12.         <s:textfield name="name" label="name"></s:textfield>  
    13.         <s:password name="password" label="password"></s:password>  
    14.         <s:submit label="submit"></s:submit>  
    15.     </form>  
    16. </body>  
    17. </html>  

     二、领域对象

    2.定义一个Bean对象,通过Bean进行传递接收

    上述方法是最常用的一种方式,但是这个方法有个缺点:当属性较多时,Action类显得比较臃肿。

    第二种方法需要我们定义一个DTO对象(普通的JavaBean

     
     在CODE上查看代码片派生到我的代码片
    1. package com.common.login;  
    2.   
    3. public class UserBean {  
    4.       
    5.     private String name;  
    6.     private String password;  
    7.       
    8.     public void setName(String name)  
    9.     {  
    10.         this.name = name;  
    11.     }  
    12.       
    13.     public String getName()  
    14.     {  
    15.         return name;  
    16.     }  
    17.       
    18.     public void setPassword(String password)  
    19.     {  
    20.         this.password = password;  
    21.     }  
    22.       
    23.     public String getPassword()  
    24.     {  
    25.         return password;  
    26.     }  
    27.       
    28. }  

    然后将该DTO对象组合到Action中,声明相应的get/set方法

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. package com.common.login;  
    2.   
    3. import com.opensymphony.xwork2.ActionSupport;  
    4.   
    5. @SuppressWarnings("serial")  
    6. public class LoginAction extends ActionSupport{  
    7.   
    8.     private UserBean bean;  
    9.       
    10.     public UserBean getBean() {  
    11.         return bean;  
    12.     }  
    13.   
    14.     public void setBean(UserBean bean) {  
    15.         this.bean = bean;  
    16.     }  
    17.       
    18.     public void showInfo()  
    19.     {  
    20.         System.out.println("name:"+bean.getName()+"  password"+bean.getPassword());  
    21.     }  
    22.       
    23. }  

    此时页面应该修改为

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <%@ taglib prefix="s" uri="/struts-tags" %>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6. <head>  
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    8. <title>Login Page</title>  
    9. </head>  
    10. <body>  
    11.     <form action="/struts_web/common/login!login" method="post">  
    12.         <s:textfield name="bean.name" label="name"></s:textfield>  
    13.         <s:password name="bean.password" label="password"></s:password>  
    14.         <s:submit label="submit"></s:submit>  
    15.     </form>  
    16. </body>  
    17. </html>  

     三、模型驱动

    3.使用Struts2的ModelDriven模式进行传递

    第二种方式提供了一个比较简洁的表单数据接收方式,但是Action类是变得简洁了,但是页面变得相对复杂了许多。

    下面提供一种ModelDriven模式的解决方案

    使用ModelDriven方式,首先要实现ModelDriven接口和getModel方法

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. package com.common.login;  
    2.   
    3. import com.opensymphony.xwork2.ActionSupport;  
    4. import com.opensymphony.xwork2.ModelDriven;  
    5.   
    6. @SuppressWarnings("serial")  
    7. public class LoginAction extends ActionSupport implements ModelDriven<UserBean>{  
    8.   
    9.     private UserBean bean;  
    10.       
    11.     @Override  
    12.     public UserBean getModel() {  
    13.         if(bean==null)  
    14.         {  
    15.             bean = new UserBean();  
    16.         }  
    17.         return bean;  
    18.     }  
    19.     public void showInfo()  
    20.     {  
    21.         System.out.println("name:"+bean.getName()+"  password"+bean.getPassword());  
    22.     }  
    23. }<span style="font-size:18px;">  
    24. </span>  

    页面就可以改回一开始的处理方式

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <%@ taglib prefix="s" uri="/struts-tags" %>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6. <head>  
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    8. <title>Login Page</title>  
    9. </head>  
    10. <body>  
    11.     <form action="/struts_web/common/login!login" method="post">  
    12.         <s:textfield name="name" label="name"></s:textfield>  
    13.         <s:password name="password" label="password"></s:password>  
    14.         <s:submit label="submit"></s:submit>  
    15.     </form>  
    16. </body>  
    17. </html><span style="font-size:18px;">  
    18. </span>  

    注意:当返回result前对业务对象修改了,但是值栈中对应的对象依然是之前的就值,若想在返回result之前刷新值栈中业务对象各个属性的根对象,需在该action中配置如下参数:

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <action name="login" class="com.common.login.LoginAction">  
    2.             <interceptor-ref name="defaultStack">  
    3.                 <param name="modelDriven.refreshModelBeforeResult">true</param>  
    4.             </interceptor-ref>  
    5.             <result name="login">/pages/common/login/login.jsp</result>  
    6.             <result name="success">/pages/common/login/success.jsp</result>  
    7.             <result name="error">/pages/common/login/error.jsp</result>  
    8.         </action>  

     

  • 相关阅读:
    哈夫曼树
    顺序栈和链栈
    线性表(二) 单链表的增删改查及源码 (修改)
    线性表(二):单链表的增删改查及源码
    线性表(一):顺序表的增删改查及源码
    从头学数据结构--跟随浙大陈越姥姥的步伐
    Java学习笔记--scanner获取键盘输入
    关于方法、变量、类等命名规范
    Java学习笔记--类型自动转换、强制类型转换、溢出
    java学习笔记--重载
  • 原文地址:https://www.cnblogs.com/baorantHome/p/7199152.html
Copyright © 2011-2022 走看看