1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Struts2(接受表单参数)请求数据自动封装和数据类型转换

Struts2(接受表单参数)请求数据自动封装和数据类型转换

时间:2023-12-23 23:03:28

相关推荐

Struts2(接受表单参数)请求数据自动封装和数据类型转换

Struts2请求数据自动封装:

(1)实现原理:参数拦截器

(2)方式1:jsp表单数据填充到action中的属性;

普通的成员变量,必须给set,get可以不给的。

注意点,Action中定义成员变量,成员变量的setXxx方法名中的Xxx和表单中name属性提交的参数对应起来的;

(3)方式2:领域模型接受表单的参数(常用),jsp表单数据填充到action的对象的属性;

对象类型,一定给get方法。

注意点:Action中定义封装的实体类对象如private User user,并给set,get方法,在jsp页面需要注意是user.id;

(4)方式3:模型驱动接受表单的参数,了解即可,这里省略;

1:方式1:

第一步:引包,省去

第二步:配置struts2的过滤器

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3 <display-name>struts2_0221</display-name> 4 <welcome-file-list> 5<welcome-file>index.html</welcome-file> 6<welcome-file>index.htm</welcome-file> 7<welcome-file>index.jsp</welcome-file> 8<welcome-file>default.html</welcome-file> 9<welcome-file>default.htm</welcome-file>10<welcome-file>default.jsp</welcome-file>11 </welcome-file-list>12 13 <!-- struts2过滤器 -->14 <filter>15 <!-- 过滤器名称 -->16 <filter-name>struts2</filter-name>17 <!-- 过滤器类 -->18 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>19 </filter>20 <!-- struts2过滤器映射 -->21 <filter-mapping>22 <!-- 过滤器名称 -->23 <filter-name>struts2</filter-name>24 <!-- 过滤器映射 -->25 <url-pattern>/*</url-pattern>26 </filter-mapping>27 28 </web-app>

第三步:开发Action

1 package com.bie.type; 2 3 import java.util.Date; 4 5 import com.opensymphony.xwork2.ActionSupport; 6 7 /** 8 * @author BieHongLi 9 * @version 创建时间:2月21日 下午8:39:13 10 * Struts2的核心业务,请求数据自动封装和类型转换11 * 这个继承不继承即可extends ActionSupport,习惯继承了12 */13 public class TypeAction extends ActionSupport{14 15 16private static final long serialVersionUID = 1L;17private String name;18private String password;19private int age;20private Date birthday;//Date日期类型,导入的utilsl类型的2122//普通的成员变量,必须给set,get可以不给的。23public String getName() {24 return name;25}26public String getPassword() {27 return password;28}29public int getAge() {30 return age;31}32public Date getBirthday() {33 return birthday;34}35 36 37//处理注册请求,String类型的,不能带参数的38public String register() {39 System.out.println(name+" "+password+" "+age+" "+birthday);40 return SUCCESS;41}42 }

第四步:配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"/dtds/struts-2.0.dtd">

<struts>

<!-- 声明包 -->

<package name="finalPackage" extends="struts-default">

<action name="requestAction" class="com.bie.finalImpl.FinalAction">

<result name="success">success.jsp</result>

</action>

<action name="ImplAction" class="com.bie.finalImpl.ImplAction">

<result name="success">success.jsp</result>

</action>

<action name="type_*" class="com.bie.type.TypeAction" method="{1}">

<result name="success">show.jsp</result>

</action>

</package>

</struts>

第五步:注册页面index.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>表单提交的页面</title> 8 </head> 9 <body>10 <form action="${pageContext.request.contextPath}/type_register.action" method="post">11账号:<input type="text" name="name"/>12密码:<input type="password" name="password"/>龄:<input type="text" name="age"/>14出生:<input type="text" name="birthday"/>15<input type="submit" value="注册"/>16 </form>17 </body>18 </html>

第六步:显示页面show.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>显示的页面</title> 8 </head> 9 <body>10 <h1>Struts2的进行数据封装和类型转换的使用</h1>11 </body>12 </html>

方式2:

第一步:引包,省去

第二步:配置struts2的过滤器,和上面的一样

第三步:开发Action

1 package com.bie.type; 2 3 import java.util.Date; 4 5 import com.opensymphony.xwork2.ActionSupport; 6 7 /** 8 * @author BieHongLi 9 * @version 创建时间:2月21日 下午8:39:13 10 * Struts2的核心业务,请求数据自动封装和类型转换11 * 这个继承不继承即可extends ActionSupport,习惯继承了12 */13 public class TypeAction extends ActionSupport{14 15 16private static final long serialVersionUID = 1L;17private User user;//对象类型,一定给get方法18public User getUser() {19 return user;20}21public void setUser(User user) {22 this.user = user;23}2425//处理注册请求,String类型的,不能带参数的26public String register() {27 System.out.println(user.getName());28 System.out.println(user.getPassword());29 System.out.println(user.getAge());30 System.out.println(user.getBirthday());31 return SUCCESS;32}3334 }

第四步:在开发action之前需要先创建一个实体类User.java

1 package com.bie.type; 2 3 import java.util.Date; 4 5 /** 6 * @author BieHongLi 7 * @version 创建时间:2月22日 下午4:17:02 8 * 9 */10 public class User {11 12private String name;13private String password;14private int age;15private Date birthday;//Date日期类型,导入的utilsl类型的1617//普通的成员变量,必须给set,get可以不给的。18public void setName(String name) {19 this.name = name;20}21public void setPassword(String password) {22 this.password = password;23}24public void setAge(int age) {25 this.age = age;26}27public void setBirthday(Date birthday) {28 this.birthday = birthday;29}30public String getName() {31 return name;32}33public String getPassword() {34 return password;35}36public int getAge() {37 return age;38}39public Date getBirthday() {40 return birthday;41}4243 }

第五步:配置struts.xml,和上面的一样,省去

第六步:注册页面index.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>表单提交的页面</title> 8 </head> 9 <body>10 <form action="${pageContext.request.contextPath}/type_register.action" method="post">11账号:<input type="text" name="user.name"/><br/>12密码:<input type="password" name="user.password"/><br/>龄:<input type="text" name="user.age"/><br/>14出生:<input type="text" name="user.birthday"/><br/>15<input type="submit" value="注册"/>16 </form>17 </body>18 </html>

第七步:显示页面show.jsp,和上面的一样,省去

2:Struts的数据类型转换:

(1):Struts中jsp提交的数据,struts会自动转换为action中属性的类型。对于基本数据类型以及日期类型会自动转换;日期类型只支持yyyy-MM-dd格式,如何是其他格式,需要自定义类型转换器。

(2):自定义类型转换器:

a:局部类型转换器;

b:全局类型转换器;

(3):Struts2转换器API:

|--TypeConverter 转换器接口

|--DefaultTypeConverter 默认类型转换器类

|--StrutsTypeConverter 用户编写的转换器类,继承此类即可

(4):局部类型转换器,转换器开发步骤:

《需要注意的是TypeAction和TypeAction-conversion.properties必须在同一目录下,转换器类一般在utils包下》

a:写转换器类,自定义转换器继承StrutsTypeConverter类,重写convertFromString和converToString方法;

b:注册转换器,配置转换器类(告诉struts应用自己的转换器类)

--》在同包的action目录下(在action所在包中建立),新建一个properties文件

--》命名规则:ActionClassName-conversion.properties

命名举例:TypeAction-conversion.properties

《需要注意的是TypeAction必须放在相应的目录下面。》

c:内容,在所建立的ActionClassName-conversion.properties书写如下内容;

user.birthday=转换器全路径(com.bie.type.MyConverter)

d:总结:

转换器,不能给其他Action使用。以上的转换器注册时候是与Action的名字相耦合的,因此只能在自己的Action中内部使用,称之为局部类型转换注册方式;

3:局部类型转换器,转换器开发步骤

(1):写转换器类(依旧是上面的开发案例和内容,只是增加了转换器,数据类型转换的使用)

package com.bie.type;

import java.sql.Date;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

/**

* @author BieHongLi

* @version 创建时间:2月22日 下午5:10:49

* 自定义类型转换器

*/

public class MyConverter extends StrutsTypeConverter{

/***

* 把String转换为指定的类型【String to Date】

* @param context 当前上下文环境

* @param values jsp表单提交的字符串的值

* @param toClass 要转换为目标类型

*/

@Override

public Object convertFromString(Map context, String[] values, Class toClass) {

//判断 内容不能为空

if(values==null || values.length==0){

return null;

}

//判断类型必须为Date

if(Date.class!=toClass){

return null;

}

try {

//转换

SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");

return sdf.parse(values[0]);

} catch (ParseException e) {

throw new RuntimeException(e);

}

}

@Override

public String convertToString(Map arg0, Object arg1) {

return null;

}

}

(2):配置转换器类(告诉struts应用自己的转换器类)

(3):内容文件命名为:TypeAction-conversion.properties

1 user.birthday=com.bie.type.MyConverter

4:全局类型转换器,转换器开发步骤:《需要写一个转换器,给所有的action用》

(1):写转换器类

(2):配置全局转换器类(告诉struts应用自己的转换器类)

--》在项目src目录下建立以下固定文件:xwork-conversion.properties

(3):内容

Java.util.Date=转换器类(com.bie.type.MyConverter)

(4)全局类型转换器,转换器开发步骤

局部类型转换器和全局类型转换器的主要区别就是配置的不一样;

文件命名为:xwork-conversion.properties

要转换称的某种类型的全路径 = 自定义类型转换器的全路径;

1 java.util.Date=com.bie.type.MyConverter

注意:可以使用多种日期格式的进行转换,主要改变的是类转换器,这样yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日,这三种格式都可以进行输入了。

1 package com.bie.type; 2 3 import java.text.DateFormat; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.Map; 8 9 import org.apache.struts2.util.StrutsTypeConverter;10 11 /** 12 * @author BieHongLi 13 * @version 创建时间:2月22日 下午5:10:49 14 * 自定义类型转换器15 */16 public class MyConverter extends StrutsTypeConverter{17 18//新需求:要求项目中要支持的格式,如:yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日19//先定义项目中支持的转换的格式20DateFormat[] df={21 new SimpleDateFormat("yyyy-MM-dd"),22 new SimpleDateFormat("yyyyMMdd"),23 new SimpleDateFormat("yyyy年MM月dd日")24};2526/***27* 把String转换为指定的类型【String to Date】28* @param context 当前上下文环境29* @param values jsp表单提交的字符串的值30* @param toClass 要转换为目标类型31*/32/*@Override33public Object convertFromString(Map context, String[] values, Class toClass) {34 //判断 内容不能为空35 if(values==null || values.length==0){36 return null;37 }38 //判断类型必须为Date39 if(Date.class!=toClass){40 return null;41 }42 try {43 //转换44 SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");45 return sdf.parse(values[0]);46 } catch (ParseException e) {47 throw new RuntimeException(e);48 }49}*/50 5152@Override53public Object convertFromString(Map context, String[] values, Class toClass) {54 //判断 内容不能为空55 if(values==null || values.length==0){56 return null;57 }58 //判断类型必须为Date,注意Date是 java.util.Date;59 if(Date.class!=toClass){60 return null;61 }62 //迭代,转换失败向下一个格式转换,转换成功直接返回63 for(int i=0;i<df.length;i++){64 try {65 //转换66 return df[i].parse(values[0]);67 } catch (ParseException e) {68 continue;69 }70 }71 return null;72}73@Override74public String convertToString(Map arg0, Object arg1) {75 return null;76}77 78 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。