1. 项目树形图如下:
在昨天的基础上,今天学习了局部类型转换,新增加了几个文件,分别是input.jsp; output.jsp; PointAction.java;
Point.java; PointConverter.java; PointAction-converter.properties;

2. 代码部分:
2.1 input.jsp:
</head>
<h3><font color="red">使用逗号将point的两个坐标分隔开</font></h3>
<body>
<s:form action="pointConverter">
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="date" label="birthday"></s:textfield>
<s:textfield name="age" label="age"></s:textfield>
<s:submit name="submit"></s:submit>
</s:form>
</body>
2.2 Point.java:
package com.test.bean;
public class Point
{
private int x;
private int y;
}
PS: getter and setter here are omited for save spaces
2.3 PointAction.java:
public class PointAction extends ActionSupport
{
private Point point;
private int age;
private String username;
private Date date;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
为了节省篇幅,上述的各个属性的getter,setter方法就再次省略,但是在真正的项目代码中显然必不可少!
2.4:PointAction-converterProperties
point=com.test.converter.PointConverter
2.5: struts.xml:
</action>
<action name="pointConverter" class="com.test.action.PointAction">
<result name="success">/output.jsp</result>
</action>
2.6: PointConverter.java:
public class PointConverter extends DefaultTypeConverter{
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(Point.class == toType)//要转换成的类型叫做Point
{
Point point=new Point();
String[] str= (String[])value;//向下类型转换!!
String[] paramValue = str[0].split(",");
int x=Integer.parseInt(paramValue[0]);
int y=Integer.parseInt(paramValue[1]);
point.setX(x);
point.setY(y);
return point;
}
if(String.class==toType) //从服务器端到客户端的类型转换
{
Point point=(Point)value;
int x= point.getX();
int y= point.getY();
String result="[ x ="+x+" ,y= "+y+" ]";
return result;
}
return null;
}
}
3. 注意事项:
3.1 properties文件的建立:
在建立类型转换的properties文件的时候,首先要明确,是要转换哪一个Action文件中的那一个变量,从而,在建立属性文件时,此文件的名称必须按照《此ACTION类名+‘-conversion.properties’》的格式,并且建立在此Action所在的包下
例如,在上例中,我们是想对PointAction中的Point进行类型转换,所以,我们在PointAction.java所在的包:
com.test.Action包下,建立名字为PointAction-conversion.properties的文件。
3.2 PointConverter代码解释:
首先,此类继承了,DefaultTypeConverter类,并且我们重写了 Public Object convertValue(Map context, Object value, Class toType)函数,
其中函数中的参数toType是用来判断,类型转换的方向。
if(Point.class == toType) 表示,要将要转换成Point类型(也就是将客户端传来的String转成Point)
if(String.class==toType) 表示,转换的目标类型为String(也就是将某Object转换成显示在客户端的String类型)
String[] str= (String[])value;为什么将Value要看做是一个String的数组,而不看成单一的一个String类型变量,是因为,虽然在Input.jsp文件中,point传回来的只是一个String变量,但是,估计到整个开发的环境如果很庞大的话,难免会有多个叫做Point的空间,会在同一个.jsp文件中,也就是会同一时间有多个Point往服务器传值,所以,写成一个String数组来接受,是有一定道理的(这个部分是结合视频老师中的描述,和自己的猜想得到的,不一定正确,如果有高人发现错误,或者有更精确的见解,欢迎拍砖,指点!)
3.3 整个运作的流程:
1. 首先,用户在客户端的界面上输入 按格式要求的数据。如图:

2. A. 在input.jsp文件中,找到Action=“pointConverter”
B. 然后结合struts.xml文件中的“
<action name="pointConverter" class="com.test.action.PointAction">”进入PointAction.java文件。
C. 通过结合input.jsp中的name属性后面的字符串与PointAction类中的每一个set方法的方法名对应的机制,将页面传来的字符串值,setter给对应的变量。但是因为,客户端传来的都是String类型的,严格意义上讲,只有在setUsername(String user)的时候不用类型转换,不过,struts已经包含一些非常基础的默认的方法,来进行一些基本的stirng<--->int; String<--->date等等之间的转换,所以在这里我们需要手动添加的类型转换只有private point;
例如,当流程刚转入到PointAction的时候:
struts帮助我们,将input.jsp中的<s:textfield name="username" label="username">和PointAction.java中代码public void setPoint(Point point)的两处红色标记,从而进行匹配。然后,同时回去查找com.test.Action的包中,是否存在有PointAction开头的conversion.properties文件。
找到后,进入此文件,查找是哪个属性需要类型转换,根据代码:
point=com.test.converter.PointConverter一看,发现是point变量,从而进入=号右边的文件,继续执行,类型转换。将转换好的格式存入Point point对象中。
等到,Action执行完execute函数,跳转到output.jsp时,又通过上述介绍的比对方是,将.jsp文件中的name属性和getter方法getXXX的XXX进行比较,将服务器的值传回给jsp,当然在执行getter的时候,同样会查询是否有类型转换。方法,以此类推。
4. 最后显示结果 如图:


- 大小: 10.4 KB

- 大小: 5.6 KB

- 大小: 2.1 KB
分享到:
相关推荐
3. **类型转换(Type Conversion)**:Struts2自动处理用户输入数据的类型转换,这在`com.opensymphony.xwork2.converters`包中实现。例如,`StringConverter`将字符串转换为其他类型,如整数或日期。 4. **配置...
6. **类型转换(Type Conversion)**:Struts2自动处理表单数据的类型转换,减少了开发者手动处理数据格式化的工作。 7. **验证框架**:内置的验证框架可以方便地对用户输入进行验证,提供了一套灵活的验证规则和...
struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter struts5 增加集合类型,使用范型 ...
本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...
`struts2test2`可能展示了局部类型转换的应用,`struts2test4`可能是关于全局类型转换的实例,而`struts2test3`可能用于演示处理大量数据类型的转换。通过查看和运行这些代码,你可以更直观地理解每种转换方法的实现...
7. **类型转换与验证**:Struts2提供了自动类型转换和字段验证的功能,使得表单提交的数据可以自动转换为Action中的属性,并进行合法性检查。 8. **国际化与本地化**:Struts2支持多语言,可以轻松实现应用的国际化...
Struts2的类型转换机制还支持全局转换和局部转换。全局转换适用于整个应用,而局部转换只对特定的Action或Action的某个属性有效。全局转换可以通过在struts.xml配置文件中定义`<conversion>`元素,或者在Action配置...
Struts2的自定义类型转换可以分为两大类:局部类型转换和全局类型转换。 - **局部类型转换**:针对特定Action或实体类的类型转换,适用于特定场景下的数据处理。进一步分为: - 普通实体bean的自定义类型转换:...
在处理用户输入和业务逻辑交互时,Struts2提供了强大的类型转换和校验机制,以确保数据的有效性和安全性。以下是对给定内容的详细解释: **类型转换** 在Struts2中,当用户通过表单提交数据时,所有参数默认都以...
3. 在调用setter方法前,Struts2会检查该属性是否有自定义的类型转换器。如果存在,它会在Action同级目录下的`action名称-conversion.properties`文件中查找转换规则。若在`src`目录下的`-conversion.properties`...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。...这个案例提供了一个很好的学习点,帮助开发者更好地理解和利用Struts2框架的类型转换机制,提高代码的健壮性和可维护性。
WebWork是Struts2的基础,它的核心特性包括动作调度、类型转换、异常处理、国际化、标签库等。WebWork引入了OGNL(Object-Graph Navigation Language)表达式语言,使得在Action和视图之间传递数据更为简便。 3. *...
在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...
### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换...
以下是对"ajax-struts2需要的3个包"的详细解释: 1. **json.js**: 这是一个JavaScript库,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
在Struts 2中,AJAX(Asynchronous JavaScript and XML)技术和JSON(JavaScript Object Notation)的结合使用,允许开发人员实现页面的局部更新,提升用户体验,而无需每次请求都刷新整个页面。 **AJAX** 是一种在...
### Struts2学习笔记知识点详解 #### 一、基础知识 **1. Struts2核心组件** - **XWork-2.0.5.jar**: 引入WebWork框架的核心功能,这是Struts2的一个重要组成部分,提供了请求处理的核心逻辑。 - **Commons-...
Struts2、DWR(Direct Web Remoting)和Ajax是Web开发中的关键技术,它们结合使用可以实现页面的局部刷新,提高用户体验。Struts2是一个基于MVC设计模式的Java Web框架,DWR则是一个用于简化AJAX开发的库,允许前端...
Struts2提供自动类型转换机制。在Action中,Struts会尝试将客户端提交的数据转换为相应的属性类型。如果需要自定义转换,可以在`conversion.properties`文件中指定转换器类。转换器可以是局部的,针对特定Action,也...
### Struts2学习文档知识点详解 #### 一、Struts2 Action **1.1 Action通过ActionContext间接访问Servlet API** - **概念介绍**:在Struts2框架中,Action对象可以通过`ActionContext`来间接访问到Servlet API,...