给出如下实例
1、编写输入表单 input.jsp,代码如下
<body>
<h2><font color="red">用逗号将两个点分开</font></h2>
<s:form action="pointConverter">
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="point" label="point2"></s:textfield>
<s:textfield name="point" label="point3"></s:textfield>
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="date" label="date"></s:textfield>
<s:submit label="submit"></s:submit>
</s:form>
</body>
其中age,username,date的类型转换,struts2可以为我们自动完成,而对于point的类型转换我们需要一些额外的操作,具体见如下几步。
2、编写pointer类,代码如下:
package com.test.bean;
public class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
3、编写类pointer的action,代码如下:
package com.test.action;
import java.util.Date;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.Point;
public class PointAction extends ActionSupport{
private List<Point> point;
private int age;
private String username;
private Date date;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
public List<Point> getPoint() {
return point;
}
public void setPoint(List<Point> point) {
this.point = point;
}
}
4、配置struts.xml
<action name="pointConverter" class="com.test.action.PointAction">
<result name="success">/output.jsp</result>
<result name="input">/input.jsp</result>
</action>
5、编写output.jsp
point <s:property value="point"/><br>
age <s:property value="age"/><br>
username <s:property value="username"/><br>
date <s:property value="date"/><br>
6、编写转换器类PointConvert类
package com.test.converter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
public class PointConvert extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
List<Point> point=new ArrayList<Point>();
for(String str1:values)
{
String[] str=str1.split(",");
int x=Integer.parseInt(str[0]);
int y=Integer.parseInt(str[1]);
Point pt=new Point();
pt.setX(x);
pt.setY(y);
point.add(pt);
}
return point;
}
@Override
public String convertToString(Map context, Object o) {
List<Point> point=(List<Point>)o;
StringBuilder buf=new StringBuilder();
buf.append("[");
int number=0;
for(Point pt:point)
{
++number;
int x=pt.getX();
int y=pt.getY();
buf.append(number).append(".( x= ").append(x).append(" y= ").append(y).append(")");
}
buf.append("]");
return buf.toString();
}
}
7、配置PointConvert类的映射,创建一个PointAction-conversion.properties的文件。
point=com.test.converter.PointConvert
这种类型的是局部类型转换文件,也可以生成全局的,以本例而言可以命名为"xwork-conversion.properties",代码为:
com.test.bean.Point=com.test.converter.PointConverter
可以根据需求自己来定
至此一个类型转换实例开发完毕。
8、总结
(1)struts2的类型转换流程是这样的,把提交表单的参数,如本例中的username,用户再提交表单后,根据struts2.xml文件中的配置,表单中的参数交给PointAciton中的XXset方法,XXset方法将非对象类型的数据隐式转换成目标类型,(注意从客户端传过来的都是String类型的数据),对于对象类型的数据,XXset方法首先找这样的文件,它的名字为”本action的类名-conversion.properties“,如果没有找到那就找名字为”xwork-conversion.properties“的文件,如果还仍未找到,那么调用对象类型的 toString方法,赋给本action的成员变量。
(2)类型转换要知道的类:DefaultTypeConverter,StrutsTypeConverter。
(3)类型转换优先于数据校验。
分享到:
相关推荐
此外,`Struts2TypeConversion.zip`这个压缩包文件可能包含了相关的示例代码、测试用例或者自定义转换器的实现,供学习者参考和实践。通过分析这些代码,我们可以更直观地了解如何在实际项目中应用Struts2的类型转换...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...
10. **类型转换和插件**:Struts2具有强大的类型转换能力,可以自动将请求参数转换为Action属性。此外,通过插件机制,可以轻松地扩展Struts2的功能,如集成Spring、Hibernate等。 通过深入理解和实践这些知识点,...
1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 2. **异常处理与错误封装**:如果类型转换过程中遇到问题...
个人struts2框架学习后的梳理和总结,内容丰富,从配置文件到action类、result、ognl、类型转换器、国际化、拦截器、表单验证等等内容,还推荐了很多博客链接,有了它自学Struts2框架毫无压力!
Struts2允许自定义类型转换器,以便在Action属性和请求参数之间进行数据转换。局部类型转换器针对特定Action类的某个属性,而全局类型转换器则对所有Action类生效。通过实现`Converter`接口或扩展`...
总结来说,Struts2的类型转换机制是其核心功能之一,它有效地解决了HTTP请求数据与Action属性之间的类型不匹配问题。理解并掌握Struts2的类型转换,对于提升Java web应用的开发效率和质量具有重要意义。通过学习和...
相比于Struts1,Struts2提供了更强大的功能,包括但不限于拦截器、类型转换、文件上传/下载等。Struts2的核心思想是基于拦截器(Interceptor)的,这种设计使得开发者可以更容易地扩展框架的功能。 ### Struts2与...
总结起来,Struts2是一个功能丰富的Java web开发框架,它的环境搭建、类型转换、输入校验、拦截器机制、国际化支持以及与Servlet API的整合,为开发者提供了强大且灵活的工具,帮助构建高效、可维护的Web应用。学习...
- **概念介绍**:Struts2框架内置了一套类型转换机制,但有时需要对特定的数据类型进行定制化的转换处理。 - **实现步骤**: - 创建自定义的类型转换器类。 - 在`struts.xml`中注册自定义转换器。 - 在Action类中...
### Struts2框架深入解析与自学总结 #### Struts2框架简介 Struts2是Apache组织维护的一个开源框架,它是Struts1的升级版本,基于MVC(Model-View-Controller)架构模式,用于简化Java Web应用的开发过程。Struts2...
4. **类型转换**:自动类型转换机制,使得表单提交的数据可以自动转化为Action属性。 5. **异常处理**:全局异常处理机制,可以统一处理应用程序中的异常,提高代码可维护性。 三、Struts2与Struts1.x的区别 1. *...
Struts2提供了一种自动类型转换机制,允许用户输入的数据自动转换为Action类中相应属性的类型。开发者可以通过注解或配置文件自定义类型转换规则,以处理复杂或特殊类型的字段。 四、Struts2数据校验和验证框架: ...
Struts2还提供了自动的数据类型转换功能,可以将基本类型的数据进行转换,同时允许开发者定义更复杂的转换规则。 #### 结果类型与拦截器 Struts2中的`ResultTypes`定义了不同的结果处理方式,例如可以重定向到另一...
### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...
总结来说,Struts2作为一款强大的MVC框架,通过其无侵入式设计、拦截器、类型转换、多样化的视图支持和灵活的数据校验,极大地提升了Java web开发的效率和质量。对于初学者来说,理解和掌握这些核心特性是学习Struts...