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>  

 

原文地址:https://www.cnblogs.com/baorantHome/p/7199152.html