struts接收表单数据的3种方式

一、普通属性

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

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

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

jsp页面代码

  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)

  1. package com.common.login;
  2. public class UserBean {
  3. private String name;
  4. private String password;
  5. public void setName(String name)
  6. {
  7. this.name = name;
  8. }
  9. public String getName()
  10. {
  11. return name;
  12. }
  13. public void setPassword(String password)
  14. {
  15. this.password = password;
  16. }
  17. public String getPassword()
  18. {
  19. return password;
  20. }
  21. }

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

[java] view plain copy

  1. package com.common.login;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. @SuppressWarnings("serial")
  4. public class LoginAction extends ActionSupport{
  5. private UserBean bean;
  6. public UserBean getBean() {
  7. return bean;
  8. }
  9. public void setBean(UserBean bean) {
  10. this.bean = bean;
  11. }
  12. public void showInfo()
  13. {
  14. System.out.println("name:"+bean.getName()+"  password"+bean.getPassword());
  15. }
  16. }

此时页面应该修改为

[html] view plain copy

  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

  1. package com.common.login;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. import com.opensymphony.xwork2.ModelDriven;
  4. @SuppressWarnings("serial")
  5. public class LoginAction extends ActionSupport implements ModelDriven<UserBean>{
  6. private UserBean bean;
  7. @Override
  8. public UserBean getModel() {
  9. if(bean==null)
  10. {
  11. bean = new UserBean();
  12. }
  13. return bean;
  14. }
  15. public void showInfo()
  16. {
  17. System.out.println("name:"+bean.getName()+"  password"+bean.getPassword());
  18. }
  19. }<span style="font-size:18px;">
  20. </span>

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

[html] view plain copy

  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

  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>

时间: 2024-07-31 15:51:34

struts接收表单数据的3种方式的相关文章

spring mvc 接收表单数据

---恢复内容开始--- 一个普通的表单. 表单的代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/T

struts处理表单数据

action获取表单提交数据 <form method="post" action="./user/adduser.action"> <label for="name">姓名:</label> <input type="text" name="name" id="name"> <input type="submit"

PHP利用超级全局变量$_GET来接收表单数据。

我们在linux上用 touch php_get.html php_get.php创建两个文件. php_get.html文件的代码如下: 1 <!doctype html> 2 <html> 3 <head> 4 <title>超级全局变量$_GET来接收提交的数据,然后返回信息</title> 5 <meta http-equiv="contnet-type" content="text/htm"

form表单提交的两种方式 button和submit的使用方法

1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的头部插入一个js方法: function checkUser(){   var result = document.getElementById("userid").value;   var password = document.getElementById("userpass

form表单提交的两种方式

1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的头部插入一个js方法: function checkUser(){   var result = document.getElementById("userid").value;   var password = document.getElementById("userpass

asp.net 登陆验证 Form表单验证的3种方式 FormsAuthentication.SetAuthCookie;FormsAuthentication.RedirectFromLoginPage;FormsAuthenticationTicket

我们在登陆成功后,使用下面的3种方法,都是同一个目的:创建身份验证票并将其附加到 Cookie, 当我们用Forms认证方式的时候,可以使用HttpContext.Current.User.Identity.IsAuthenticated  (或者也可以用 Request.IsAuthenticated ,这个实际上也是调用的是User.Identity.IsAuthenticated来验证)来判断是否登陆;而这个判断就是依赖于这个Cookie里的信息判断用户是否登陆. FormsAuthent

接收表单参数的几种方法

1.第一种     Map<String, String[]> paramMaps = request.getParameterMap();//接受参数 String  表单名=((String[]) paramMaps.get("表单名"))[0]; 获取表单数据时总是用request.getParameter(“name”),根据表单中的name值获取value值,需要获取几项就得重复写几次getParameter,而request.getParameterMap方法则

2016 系统设计第一期 (档案一)MVC 控制器接收表单数据

1.FormCollection collection   user.UserId =Convert.ToInt32(collection["UserId"]); /// <summary> /// 更新 /// </summary> /// <param name="userId"></param> /// <param name="collection"></param>

js表单提交的三种方式

第一种: <script type="text/javascript"> function check(form) { if (form.userId.value == '') { alert("请输入用户帐号!"); form.userId.focus(); return false; } if (form.password.value == '') { alert("请输入登录密码!"); form.password.focus(