struts2提供了简单基本类型的自动转换,如
java
八种基本数据类型,以及
String
,
Date
等简单数据类型。
我们将上个例子修改一下:
index
.jsp中添加:
年龄:
<
input
type
=
"text"
name
=
"age"
/><
br
/>
生日:
<
input
type
=
"text"
name
=
"birthday"
/><
br
/>
result
.jsp中添加:
你的年龄:${requestScope.age}
<
br
/>
你的生日是:${requestScope.birthday}
UserAction中添加两个属性:
private int age
;
private Date birthday
;并添加
get/set
方法。运行后输入相应信息结果页面显示:
你的用户名:lisi
你的年龄:20
你的生日是:Sat Sep 08 00:00:00 CDT 1990
我们可以看到struts2已经将页面传过来的string类型经行了转换。
但是如果我们传入一个User类型的对象,struts2会不会帮我们转换的,肯定不会了,struts2怎么会知道User是个什么东西呢?当我们需要对复杂对象类型经行转换时就需要我们自己动手了。Struts2只会帮我做简单的事,复杂的事还是需要我们自己来做。
下面来看看一个复杂对象类型的转换该怎么做?(实例二)
index.jsp:
<
body
>
<
h2
>
请用逗号分隔用户名和年龄
</
h2
>
<
form
action
=
"userAction"
>
用户:
<
input
type
=
"text"
name
=
"user"
/>
<
input
type
=
"submit"
value
=
"提交
"
/>
</
form
>
</
body
>
result
.jsp:
<
body
>
<
s:property
value
=
"user"
/>
</
body
>
struts
.xml:
<
struts
>
<
package
name
=
"struts2_2"
extends
=
"struts-default"
>
<
action
name
=
"userAction"
class
=
"com.gufengxiachen.struts2_2.action.UserAction"
>
<
result
name
=
"success"
>
/result.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
UserAction.java:
package com.gufengxiachen.struts2_2.action;
import com.gufengxiachen.struts2_2.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
return "success";
}
}
User.java:
package
com.gufengxiachen.struts2_2.model;
public
class
User {
private
String
username
;
private
int
age
;
public
String getUsername() {
return
username
;
}
public
void
setUsername(String username) {
this
.
username
= username;
}
public
int
getAge() {
return
age
;
}
public
void
setAge(
int
age) {
this
.
age
= age;
}
}
UserConversion.java(转换器类
):
package com.gufengxiachen.struts2_2.conversion;
import java.util.Map;
import java.util.StringTokenizer;
import com.gufengxiachen.struts2_2.model.User;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class UserConversion extends DefaultTypeConverter{
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
//从页面到后台转换
if(User.class==toType){
String[] str=(String[])value;
String firstValue=str[0];
StringTokenizer st=new StringTokenizer(firstValue,";");
String username=st.nextToken();
int age=Integer.parseInt(st.nextToken());
User user=new User();
user.setUsername(username);
user.setAge(age);
return user;
}else if(String.class==toType) //从后台向页面转换
{
User user=(User)value;
String username=user.getUsername();
int age=user.getAge();
String userInfo="你的用户名:
"+username+"
你的年龄:
"+age;
return userInfo;
}
return null;
}
}
UserAction-conversion.properties(配置转换器属性文件
):
user=com.gufengxiachen.struts2_2.conversion.UserConversion
web.xml和实例一样。
我们可以看到result.jsp
页面显示:
你的用户名:zhangsan你的年龄:15
这个很好理解,当struts2接受参数时发现Action中没有属性与之匹配,当它发现UserAction-conversion.perproties文件时,发现有个转换器,然后转向相应的转换器,转换后返回结果。
我们可以看到转换器实现了一个类:DefaultTypeConverter,并且重写了
c
onvertValue这个方法,这个方法就是执行转换的方法。在这个方法里,我们可以进行双向转换,即可以从页面传过来的String
转换为我们需要的对象,也可以经行反向转换,其实我们还可以继承
StrutsTypeConverter
类,这个类是
struts2
对类型转换的一个简单封装,它里面有两个方法一个是从
String
转换到对象,
convertFromString(Map<String,Object> context,String[],values,Class toClass),
另一个是从对象转换到
String
类型为:
converterToString
(
Map<String ,Object> context,Object o,
)
推荐继承StrutsTypeConverter
类,因为它方便,清晰。
下面来总结一下复杂类型转换:
对于自定义类型转换器来说需要提供三个信息:Action
的名字,
Action
中待转换的属性名以及该属性对应的类型转换器。其中
Action
的名字是通过属性文件
(
和
Action
同包
)
来获得的,
Action
中待转换的属性名是通过属性文件中的
key
值获得的,该属性对应的类型转换器是通过
key
值所对应的
value
值获得的。
可使用struts2
框架自带的类型转换器
StrutsTypeConverter
简化类型转换。
StrutsTypeConverter
继承于
DefaultTypeConverter
。提供两个抽象方法,分别为
convertFromString
和
converToString
,分别实现从页面向后台对象转换和从后台对象转换成字符串
还有个全局类型转换,就是不特定哪个Action
,对所有
Action
中相同的对象进行转换,和上面的类型转换唯一的区别就是转换的配置文件,文件名特定为:
xwork-conversion.perproties
。位置为
src
根目录下,内容为:待转换的类的全名(包括包名)
=
转换器的名字。
类型转换就介绍这么多,其实在实际应用中,用的不是特别多,想了解更多,可以参考struts2
的
API
文档。
分享到:
相关推荐
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...
Struts2自学笔记 Struts2是Java Web开发中的一款广泛应用的MVC框架,它基于Model-View-Controller设计模式,旨在简化企业级应用的开发流程。本自学笔记将深入探讨Struts2的核心概念、主要功能及其实现原理。 1. **...
在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...
- **优势**:使用 Struts2 可以显著提高开发效率,因为它能够处理很多基础任务,如数据接收、类型转换、验证等。 **1.2 Struts2 架构** - **MVC 架构**:Struts2 采用经典的 MVC 架构,分为模型(Model)、视图(View)...
在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
本课程笔记主要涵盖了Struts2的基础概念、核心功能及其工作流程。 首先,Struts2的处理流程是通过一系列的组件协作完成的,包括Filter Dispatcher(过滤器调度器)、Action、Interceptor(拦截器)和Result。当用户...
笔记中可能详细讲解了Struts2的配置文件,如struts.xml,它是整个应用的配置中心,定义了Action的映射、结果类型、拦截器栈等。在Action配置中,我们可以指定Action类、方法以及对应的URL路径,实现请求与业务的关联...
这篇自学笔记将深入探讨Struts2的文件上传机制。 1. **文件上传原理** 文件上传是基于HTTP协议的POST请求实现的。在HTML表单中,通过`<input type="file" />`元素让用户选择本地文件。当用户提交表单时,浏览器会...
5. **类型转换与输入校验**:Struts2在类型转换过程中也会进行基本的校验,如检查非空、数值范围等。 **四.Struts2的核心:拦截器** 拦截器是Struts2的核心组件,它们在Action执行前后介入处理流程。拦截器可以...
3. 如果注解没有提供转换器,Struts2会搜索`struts-default.xml`和应用的`struts.xml`配置文件,查找`<conversion>`元素来定义转换器。 4. 如果仍然没有找到,Struts2会尝试使用JavaBeans的`PropertyEditor`机制进行...
在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
类型转换器是Struts2框架的核心组件之一,其主要任务是将用户的输入(通常是字符串)转换为Action类中声明的字段类型。这在处理复杂的数据类型,如日期、枚举或自定义对象时尤其有用,因为默认的转换器可能无法满足...
`struts2test2`可能展示了局部类型转换的应用,`struts2test4`可能是关于全局类型转换的实例,而`struts2test3`可能用于演示处理大量数据类型的转换。通过查看和运行这些代码,你可以更直观地理解每种转换方法的实现...
3. **定义struts.xml**:在classpath中放置struts.xml文件,这是Struts2的核心配置文件,用于声明包、结果类型、拦截器以及Action等元素。 4. **创建视图和控制器**:在项目中编写JSP页面作为视图,同时定义Action类...
- **概念介绍**:Struts2框架内置了一套类型转换机制,但有时需要对特定的数据类型进行定制化的转换处理。 - **实现步骤**: - 创建自定义的类型转换器类。 - 在`struts.xml`中注册自定义转换器。 - 在Action类中...
Struts2是一个流行的Java web开发框架,其核心是Action,而类型转换是Struts2处理用户输入数据的一个重要环节。Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、...
这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...