`
coolxing
  • 浏览: 874840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97541
社区版块
存档分类
最新评论

struts2--数据类型转换

阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]

 

html页面中每一个表单输入项都只能是字符串或者字符串数组, 服务端可能需要把String转换为特定的数据类型.

在struts2中, 由parameters拦截器负责请求参数的类型转换, 该拦截器是default-stack中的一员. parameters拦截器可以自动完成字符串到基本数据类型的转换.

在Action类中定义与请求参数同名的属性, 并为这些属性提供getter, setter方法, struts2便能自动接收请求参数, 然后调用setter方法赋值给相应的属性.

 

从字符串到基本数据类型的转换.

1. jsp代码:

<form action="${pageContext.request.contextPath}/converter/userAction_save.action" name="form1" method="post">
	编号:<input type="text" name="id"><br>
	姓名:<input type="text" name="userName"><br>
	<input type="submit" value="提交"><br>
</form>

2. Action类:

public class UserAction extends ActionSupport {
	private Integer id;
	private String userName;
	public String save(){
		System.out.println("id = " + id + ", username = " + userName);
		return "success";
	}
	//省略getter和setter方法...
}

 

 

从字符串到自定义javaBean的转换.

1. jsp代码:

<form action="${pageContext.request.contextPath}/converter/personAction_save.action" name="form1" method="post">
	姓名:<input type="text" name="person.name"><br>
	年龄:<input type="text" name="person.age"><br>
	<input type="submit" value="提交"><br>
</form>

2. Action类:

public class PersonAction extends ActionSupport {
	private Person person;
	public String save() {
		System.out.println("name = " + person.getName() + ", age = " + person.getAge());
		return "success";
	}
	//省略getter和setter方法...
}

 

 

从字符串到Collection集合的转换.

1. jsp代码:

<form action="${pageContext.request.contextPath}/converter/personsAction_save.action" name="form1" method="post">
	姓名:<input type="text" name="persons[0].name"><br>
	年龄:<input type="text" name="persons[0].age"><br>
	姓名:<input type="text" name="persons[1].name"><br>
	年龄:<input type="text" name="persons[1].age"><br>
	<input type="submit" value="提交"><br>
</form>

2. Action类:

public class PersonsAction extends ActionSupport {
	private Collection<Person> persons;
	public String save() {
		for (Person p : persons) {
			System.out.println("name = " + p.getName() + ", age = "
					+ p.getAge());
		}
		return "success";
	}
	//省略getter和setter方法...
}

 

 

自定义转换器. 当struts2提供的转换器无法满足需求时, 可以自定义一个转换器.

以"yyyy~Mm~dd"类型的字符串到java.util.Date类型的转换为例.

1. jsp表单:

<form action="${pageContext.request.contextPath}/converter/dateAction_save.action" name="form1" method="post">
	出生年龄:<input type="text" name="birthday"><br>
	<input type="submit" value="提交"><br>
</form>

2. Action类:

public class DateAction extends ActionSupport {
	private java.util.Date birthday;
	public String save() {
		System.out.println(birthday);
		return "success";
	}
	//省略getter和setter方法...
}

3. 自定义转换器:

public class DateConverter extends DefaultTypeConverter {

	/**
	 * @param context: Ognl上下文
	 * @param value: 要转化的字符串数组, 调用request.getParameterVaues("birthday")获得
	 * @param toType: 目的数据类型, 此时为java.util.Date.class
	 * @return: 方法的返回值将用于设置Action中的birthday属性
	 */
	@SuppressWarnings("unchecked")
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		if (value instanceof String[] && toType == java.util.Date.class) {
			try {
				String[] str = (String[]) value;
				SimpleDateFormat sf = new SimpleDateFormat("yyyy~MM~dd");
				if (str[0] != null & str[0].matches("[0-9]{4}~[0-9]{2}~[0-9]{2}")) {
					return sf.parse(str[0]);
				}
			} catch (ParseException e) {
				e.printStackTrace();
				/*
				 * 在struts2中,处理类型转化错误的工作是由StrutsConversionErrorInterceptor拦截器完成.
				 * 如果类型转换过程中出现异常, 一定要再捕获后重新抛出.
				 * 如果错误的类型拦截器接收到异常,认为类型转化过程中出现了错误,转到input属性所指向的错误页面 .
				 * 如果错误的类型拦截器没有接收到异常,认为类型转化过程成功,这时转到成功页面.
				 */
				throw new RuntimeException(e);
			}
		}
		return null;
	}
}

4. 注册自定义的转换器: 在与当前action同级的目录创建ActionClassName-conversion.properties文件, 并在其中输入"action中的属性名称=类型转化器的全限定类名". 此时应该在DateAction类的同级目录下创建DateAction-conversion.properties文件, 输入的内容为:

birthday=cn.xing.converter.DateConverter

采用上述方式配置的转换器是局部转换器, 只对特定的Action有效. 如果想要注册全局转换器, 可以在src目录下新建xwork-conversion.properties文件, 输入的内容同上.

 

2
2
分享到:
评论

相关推荐

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    结合这三个组件,开发者可以构建出响应式、动态的Web应用,后端使用Struts 2处理业务逻辑,通过JSON Plugin返回JSON数据,前端利用jQuery通过AJAX请求获取这些数据,然后动态更新页面,提高用户体验。这种前后端分离...

    struts2-json-plugin源码

    6. **类型转换**:Struts2的类型转换器在处理JSON请求时起着关键作用,将JSON字符串转换为Java对象。 7. **自定义JSON序列化和反序列化**:源码中可能会包含自定义的序列化和反序列化逻辑,以便在转换过程中处理...

    struts2-json-plugin-2.3.8.jar

    1. 自动处理Action结果:当Action执行完成后,如果结果类型设置为"json",插件会自动将Action的模型数据转换成JSON字符串,并发送到客户端。 2. 支持数据过滤:可以指定哪些字段不参与JSON序列化,避免敏感信息泄露...

    struts2-blank-2.0.14的lib中的jar包

    - `xwork-core.jar`: XWork是Struts2的前身,提供了一些基础功能,如类型转换、结果映射等。 5. **其他依赖** - `commons-fileupload.jar`: Apache Commons FileUpload库,用于处理HTTP请求中的文件上传。 - `...

    struts2学习笔记3数据类型转换

    struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换

    struts2 相关jar包 包含json-lib-2.1.jar+struts2-json-plugin-2.1.8.1.jar

    对于Struts2,这个库使得应用程序能够轻松地处理JSON数据,例如在AJAX请求和响应中。 2. **struts2-json-plugin-2.1.8.1.jar**: 这是Struts2的一个插件,专为处理JSON请求和响应而设计。通过集成这个插件,开发者...

    struts2-core-2.3.32和xwork-core-2.3.32

    XWork则是Struts2的基础框架,提供了一系列底层功能支持,如类型转换、拦截器机制等。 标题提到的"struts2-core-2.3.32"和"xwork-core-2.3.32"是Struts2框架的重要组成部分。"struts2-core-2.3.32.jar"包含了Struts...

    struts2.3.32修补S2-045漏洞所有核心jar包及依赖的jar(含core包)

    `struts2-core-2.3.32.jar`是Struts2的核心库,包含了许多关键组件,如Action类、Interceptor拦截器、Result结果类型等。它负责处理HTTP请求,解析请求参数,执行业务逻辑,并将结果返回给用户。在这个版本中,针对...

    struts2-core-2.1.8.1.jar

    同时,"xwork-core-2.1.6.jar"是Struts2的基础,它包含了对象依赖注入(IoC)、类型转换、异常处理等功能,是Struts2框架的重要组成部分。XWork框架为Struts2提供了许多底层服务,如动作调度、类型转换等。 标签中...

    struts-2.3.15.3所以jar包

    8. **xwork-core.jar**:XWork是Struts 2的前身,它的核心功能被Struts 2继承,包括Action、Result、Interceptor等概念,以及类型转换、异常处理等机制。 9. **commons-lang3.jar, commons-logging.jar, log4j.jar*...

    struts2-json-plugin-2.1.8jar包.zip

    使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...

    Struts2.0.11-lib

    5. `xwork-2.0.11.jar`:XWork是Struts2的基础,提供动作管理和类型转换等功能。 6. `commons-logging-1.1.1.jar`、`log4j-1.2.15.jar`等:日志相关的库,帮助记录和调试应用日志。 在实际开发中,开发者需要将这些...

    struts2-json-plugin-2.1.8.1.jar

    在Struts2框架中,该插件允许开发者将Action的返回结果直接转换为JSON格式,方便进行Ajax(Asynchronous JavaScript and XML)操作,提高Web应用的响应速度和用户体验。 标题"struts2-json-plugin-2.1.8.1.jar"表明...

    struts2-lib

    - `xwork-core`: XWork是Struts2的基础,提供了Ognl表达式语言、类型转换、拦截器等功能。 2. **视图技术**: - `freemarker`: Struts2默认的视图模板引擎,用于动态生成HTML页面。 - `struts2-freemarker-...

    struts2-core-2.1.8.1 xwork-core-2.1.6源码

    3. **类型转换(Type Conversion)**:Struts2自动处理用户输入数据的类型转换,这在`com.opensymphony.xwork2.converters`包中实现。例如,`StringConverter`将字符串转换为其他类型,如整数或日期。 4. **配置...

    struts-2.1.8-LIB包

    2. **xwork-core.jar**:XWork是Struts 2的基础,提供了类型转换、验证、事件处理等基础服务。Struts 2构建在XWork之上,增强了MVC架构。 3. **ognl.jar**:Object-Graph Navigation Language(OGNL)是Struts 2中...

    struts2-jar包

    7. **类型转换与验证**:Struts2提供了自动类型转换和字段验证的功能,使得表单提交的数据可以自动转换为Action中的属性,并进行合法性检查。 8. **国际化与本地化**:Struts2支持多语言,可以轻松实现应用的国际化...

    Struts2-core-2.1.8.1.jar

    6. **类型转换(Type Conversion)**:Struts2自动处理表单数据的类型转换,减少了开发者手动处理数据格式化的工作。 7. **验证框架**:内置的验证框架可以方便地对用户输入进行验证,提供了一套灵活的验证规则和...

    Struts2-2.1.6一个最简单的例子,以及需要的基础jar包

    1. 创建`struts.xml`配置文件:这是Struts2应用的核心配置,定义了Action、拦截器和结果类型。 2. 编写Action类:Action类是处理业务逻辑的地方,继承自`com.opensymphony.xwork2.ActionSupport`。 3. 定义Action的...

Global site tag (gtag.js) - Google Analytics