接着我们要创建action来处理用户的输入数据
4 创建action
private 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;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String execute() throws Exception {
return SUCCESS ;
这里Action最好是继承ActionSupport类 public class PointConverterAction extends ActionSupport
因为ActionSupport本身已经实现许多我们经常要实现的功能,这样可以给我们省很多事情,有时只需简单的覆盖它的一些方法就可以实现相应的功能
5,创建类型装换器
我们可以通过查看struts2的api获得以下信息
java。lang。object
|---ognl。DefaultTypeConverter
|--org.apache.struts2.util.StrutsTypeConverter
最原始的的转换器需要实现TypeConverter
而ognl下的defaulttypeconverter已经给我们实现了这个接口,而struts2又提供给了我们一个更加简单的实现类StrutsTypeConveter
所以我们有两种基本的方法编写类型转换器
1.继承DefaultTypeConverter类
2。继承StrutsTypeConverter类
下面分别给出两种方法的实现
1.
package com.yxy.converter;
import java.util.Map;
import com.yxy.bean.Point;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
public Object convertValue(Map context, Object value, Class toType) {
if(Point.class == toType) {
Point point = new Point() ;
String[] paramValue = (String[])value ;
String[] pointValue = paramValue[0].split(",") ;
int x = Integer.parseInt(pointValue[0]) ;
int y = Integer.parseInt(pointValue[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 ;
}
}
2.
package com.yxy.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.yxy.bean.Point;
public class PointConverter2 extends StrutsTypeConverter {
public Object convertFromString(Map context, String[] values, Class toClass) {
Point point = new Point() ;
String[] paramValues = values[0].split(",") ;
int x = Integer.parseInt(paramValues[0]) ;
int y = Integer.parseInt(paramValues[0]) ;
point.setX(x) ;
point.setY(y) ;
return point ;
}
public String convertToString(Map context, Object o) {
Point point = (Point)o ;
int x = point.getX() ;
int y = point.getY() ;
String result = "[ x = " + x + ", y = "+y + "]";
return result ;
}
}
这两个方法可以实现双向的转换,即从用户端到服务器端和服务器端到用户端,其实很明显也是需要这样设计的
6,编写属性文件
现在已经编写好了相应的类型转换器,我们需要将利用属性文件使用它
在action的同一个目录下面放置属性配置文件,命名规则是***-conversion。properties,其中***为action的名字,后面的对于所有局部类型转换器都一样(关于局部和全局稍后再讲)
在属性文件里面编写下面一行代码,其中point指定的是action中需要被转换的属性名,后面很明显表示转换器所在的完整类
point=com.yxy.converter.PointConverter
这里强调主要是考虑到与后面全局类型转换器进行编写上的比较
7,编写struts。xml文件
因为所有应用的业务文件都已经编写完了,这时我们需要将所有的流程进行控制,这样就需要用到struts.xml,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="PointConverter" class="com.yxy.action.PointConverterAction">
<result name="success">/output.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
</struts>
代码如上,这里定义了返回页面,对应于相应的返回字符串
8,编写输出页面output。jsp
转换后的信息需要输出,
point:<s:property value="point" /><br>
age:<s:property value="age" /><br>
username:<s:property value="username" /><br>
birthday:<s:property value="date" />
这样,所有的工作就完成了,呵呵
未完待续。。。。。。。。。。。。
补充:
对于全局类型转换配置文件:
命名规则:xwork-conversion.properties
内容:com.yxy.bean.Point = com.yxy.converter.PointConverter2
其中前面表示在应用中需要转换的类,在局部类型转换中表示的是某个action中需要被转换的属性,注意比较,
后面表示完成这个类类型转换的类,同局部类型转换一样
如果需要转换的类型为Map,List等集合类,将相应的类型转换类改变即可
分享到:
相关推荐
在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...
- `xwork-core-2.3.8.jar`:XWork是Struts2的基础,提供Action管理、类型转换、国际化、异常处理等功能。它的Action机制被Struts2继承并扩展,使得业务逻辑的处理更加灵活。 3. **FreeMarker模板引擎**: - `...
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨...
总结来说,"Struts2.Hibernate3.2.Spring2.0整合续一"这个主题主要探讨了如何将这三个强大的框架结合在一起,构建高效、灵活的J2EE应用程序。通过对每个框架的理解和整合技巧的掌握,开发者可以构建出满足复杂业务...
- **Action拦截器**: Struts2的FileUploadInterceptor处理文件上传,它会自动将文件数据转换为`java.io.File`或`org.apache.struts2.dispatcher.multipart.UploadedFile`对象。 - **处理上传**: Action方法可以...
2. 将接收到的`FileItem`对象(Struts2会自动处理这部分)转换为`File`对象,或者直接将其保存到服务器的某个目录下。 3. 如果需要,可以对上传的文件进行处理,如重命名、格式转换等。 4. 最后,设置Action的结果,...
与Struts2框架相结合,可以构建出高效的文件上传系统,使得用户上传的数据能够直接写入到数据库中,提高了用户体验并优化了后台处理流程。 在"swfupload与strut2结合数据直接写入数据库"的场景中,有几个关键的技术...
1. **Struts2 配置**:在Struts2的Action类中,你可以声明一个类型为`List<Part>`的属性,Struts2会自动将上传的文件分配到这个属性中。 2. **文件保存**:在处理Action的方法中,你可以遍历`Part`列表,对每个文件...
- 自定义类型转换器,允许自定义数据类型转换规则。 - 跳转方式:forward 和 redirect,分别对应页面内部转发和外部重定向。 - 作用域传值:session、request、application 等不同范围的变量传递。 - 文件上传与...
2. **必需的分区类型**:在安装Linux系统时,通常需要两种分区类型:交换分区(`swap`)和根分区(`/`)。交换分区用于存储内存页面副本以缓解物理内存不足的情况;根分区则是整个文件系统的起点,通常包含操作系统...
2. **文件上传**:在Web应用中,`Struts`框架支持文件上传功能。这通常通过`Apache Commons FileUpload`库实现,该库允许用户从表单中上传文件。开发者需要配置ActionForm类,包含一个File类型的属性来接收上传的...
8. **使用Struts框架**:Struts框架也提供了文件下载的支持,比如在Struts2中,可以通过Action的 StreamingResult 或者 FileResult 结果类型来实现文件下载。 在处理文件下载时,还需要注意以下几点: - **异常...
9. **整合框架**:在实际开发中,jspsmart常与Spring MVC、Struts2等Web框架结合使用,提供更便捷的文件上传解决方案。 10. **前端交互**:前端页面需要配合jspsmart组件,使用特定的表单结构和属性,例如设置...
在批量图片预览中,可以利用FileReader接口的readAsDataURL方法,将图片文件转换成Base64编码的URL,然后在页面上预览。这种方式无需服务器介入,但可能受到浏览器对文件大小限制的影响。 3. **Flash支持**:尽管...
在Java后端,我们可以使用诸如Spring MVC、Struts2等Web框架来接收和处理这些文件数据。Java的Servlet API提供了HttpServletRequest对象,其中的getParts()方法可以用于接收多部分表单数据,即上传的文件。文件内容...
音乐上传功能允许管理员或授权用户上传音频文件,系统需要进行文件类型检查、大小限制以及格式转换(如MP3、WAV等)。在上传过程中,系统需要生成唯一的文件标识,并将其与数据库中的音乐资源信息关联,以便后续的...
在后端,Java开发者通常会使用Spring MVC或者Struts2等框架来接收上传的文件。以Spring MVC为例,你需要创建一个Controller方法来处理文件接收: ```java @RequestMapping(value = "/upload", method = Request...
2. 验证上传的文件,例如检查文件类型、大小等限制。 3. 使用`commons-fileupload`解析文件,将`MultipartFile`转换为`FileItem`对象。 4. 使用`commons-io`库将文件保存到服务器的指定位置,可能需要创建一个临时...
消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...