`

struts form类型转换问题,通过自定义convert类来实现类型转换二

阅读更多

在上一文中我们是通过自己写一个实现了Convert接口的类,并通过一个Serverlet在init的时候注册这个Convert。

但这样实现不够好。

在struts中可以通过插件来实现。

 

完整代码如下:

convert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="convertAction.do" method="post">
	intvalue:<input type="text" name="intval"/><br>
	doublevalue:<input type="text" name="doubleval"/><br>
	booleanvalue:<input type="text" name="booleanval"/><br>
	utildatevalue:<input type="text" name="dateval"/><br>
	<input type="submit" value="submit"/>
</form>
</body>
</html>

 

form.

package com.lwf.struts.form;


import java.util.Date;

import org.apache.struts.action.ActionForm;

public class ConvertForm extends ActionForm {
	private int intval;
	private double doubleval;
	private boolean booleanval;
	private Date dateval;
	
	public int getIntval() {
		return intval;
	}
	public void setIntval(int intval) {
		this.intval = intval;
	}
	public double getDoubleval() {
		return doubleval;
	}
	public void setDoubleval(double doubleval) {
		this.doubleval = doubleval;
	}
	public boolean isBooleanval() {
		return booleanval;
	}
	public void setBooleanval(boolean booleanval) {
		this.booleanval = booleanval;
	}
	public Date getDateval() {
		return dateval;
	}
	public void setDateval(Date dateval) {
		this.dateval = dateval;
	}
}

 

action

package com.lwf.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ConvertAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		return mapping.findForward("success");
	}

}

 

结果:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	intvalue:${convertForm.intval }<br>
	doublevalue:${convertForm.doubleval }<br>
	booleanvalue:${convertForm.booleanval }<br>
	utildatevalue:${convertForm.dateval }<br>
	</body>
</html>

 

配置:

<action path="/convertAction" type="com.lwf.struts.action.ConvertAction" name="convertForm"  scope="request">
			<forward name="success" path="/convertResult.jsp"></forward>
		</action>

 

<form-bean name="convertForm" type="com.lwf.struts.form.ConvertForm"></form-bean>

 

 

 

下面是自定义的convert类,用来将String类转换为java.util.Date类型

package com.lwf.struts.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class UtilDateConverter implements Converter {

	public UtilDateConverter(Object object) {
	}

	public Object convert(Class type, Object value) {
		
		if(value == null){
			return value;
		}
			
		if(value instanceof Date){
			return value;
		}
		
		if(value instanceof String){
			try {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
				
				return sdf.parse((String)value);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

}

 

 

以下代码关键:UtilDateConvertPlugIn用来实现PlugIn接口,并实现init方法

package com.lwf.struts.util;

import java.util.Date;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class UtilDateConvertPlugIn implements PlugIn {

	public void destroy() {

	}

	public void init(ActionServlet arg0, ModuleConfig arg1)
			throws ServletException {
		  ConvertUtils.register(new UtilDateConverter(null), Date.class);   
	}

}

 

配置:

<plug-in className="com.lwf.struts.util.UtilDateConvertPlugIn" ></plug-in>

 

 

这样Struts启动的时候会加载这个UtilDateConvertPlugIn并执行init方法。。

是不是比新建一个servlet更合理呢。。

分享到:
评论

相关推荐

    struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例

    自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....

    struts 类型转换

    在Struts的配置文件(如struts-config.xml或struts2的struts.xml)中,可以通过`&lt;form-bean&gt;`、`&lt;action&gt;`或者全局转换器配置来指定类型转换策略。例如,我们可以为特定的Action或整个应用指定自定义的转换器。 ...

    struts的[图片]文件上传和类型转换

    在Struts中,文件上传和类型转换是两个重要的功能,它们允许用户上传文件并处理不同类型的数据。 文件上传是Web应用程序中常见的一种功能,允许用户通过表单提交本地文件到服务器。在Struts中,实现文件上传的关键...

    struts2总结第二章

    Struts2是一个强大的MVC框架,它提供了许多功能来简化Web应用开发,包括类型转换、属性访问、文件上传以及拦截器等。以下是基于标题和描述的详细知识点: **一、局部类型转换** 在Struts2中,我们可以自定义类型...

    Struts2中的参数传递

    通过这两个组件,Struts2实现了动态的数据绑定和灵活的类型转换功能。 #### 二、OGNL与ValueStack ##### 1. OGNL简介 OGNL是一种强大的表达式语言,用于获取和设置Java对象的属性。在Struts2中,OGNL被用来解析和...

    struts的总结(struts1.x)

    Struts 1.x 支持数据类型的自动转换,但也可以通过自定义转换器来扩展这种功能。 **1. 自定义数据转换器** - 创建一个实现 `org.apache.struts.util.LabelValueConverter` 接口的类。 - 实现 `convert` 方法来完成...

    struts2验证笔录

    通过以上介绍,可以看出Struts2框架在数据验证方面提供了非常灵活且强大的功能,不仅能够满足基本的数据类型转换和验证需求,还支持自定义验证逻辑以及错误消息的国际化配置。这对于构建高质量的Web应用程序来说是...

    struts笔记

    3. **自定义类型转换器**:可以通过继承`StrutsTypeConverter`类并重写其中的方法来实现自定义类型转换器。 ```java public class CustomStrutsTypeConverter extends StrutsTypeConverter { public Object ...

    在Struts 2.0中实现表单数据校验

    为了更好地理解如何在Struts 2.0中实现表单数据校验,下面将通过一个具体的例子来进行讲解。 ##### 4.1 HelloWorld Action 首先,我们来看一下HelloWorld Action类,它是实现数据校验的核心部分之一: ```java ...

    javaweb编程中常见的异常及处理方法.doc

    - 通过自定义转换器可以集中管理日期类型的转换逻辑,避免了重复代码的出现。 - 提高了程序的健壮性和可读性。 5. **缺点**: - 相比直接在`Action`中进行类型转换,增加了额外的类和配置。 - 对于简单的项目来...

    Web中Date类型解决方法

    #### 一、StrutsForm中Date类型之“argumenttypemismatch”错误解决方法 在Web开发中,特别是在使用Struts框架处理表单数据时,经常会遇到日期类型处理的问题。当用户提交包含日期的表单时,如果表单中的相应字段被...

    ssha 最新 最完整 配置信息

    可以通过实现自定义的类型转换器来处理`java.util.Date`类型的转换。 **表格18**: DateConverter日期转换器类 ```java public class DateConverter implements TypeConverter { @Override public Object convert...

Global site tag (gtag.js) - Google Analytics