Struts2 基本数据类型转换的例子 详解析

对int boolean double等Java基本数据类型,是struts2自带的类型转换拦截器自动完成类型转换的,即"类型转换"是由系统自动完成的。

最终目录结构:

Struts2 基本数据类型转换的例子 详解析_第1张图片

上源码:

addMaterial.jsp:

<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2标签库调用声明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
	<head>
		<title>添加材料</title>
		<s:head />
		<sx:head />
	</head>
	<body>
		<h3 align="left"> 
			Struts2类型转换使用范例 
		</h3>
		<!-- 材料输入表单 -->
			<table>
			<s:form id="materialForm" action="addMaterial">
			<s:textfield name="material.material" label="材料名"></s:textfield>  
			<s:textfield name ="material.bid" label="价格"></s:textfield>
			<s:textfield name ="material.mount" label="库存量"></s:textfield>
			<sx:datetimepicker name ="material.expireDate" label="过期日期"></sx:datetimepicker>
			<s:submit value="提交"></s:submit>
			</s:form>
			</table>		
	</body>
</html>

注释:表单form中action="addMaterial",即提交到此action处理,由struts.xml导航。注意传递的name为material.xxx。当然,要使material.xxx意义有效,在下面的Action类中必须定义setMaterial()方法实现'注入' 并定义Material类的相应xxx属性。

struts.xml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="GBK"/>                                                                                <package name="Convert" extends="struts-default">  
  <action name="addMaterial"
   class="com.action.AddMaterialAction">
   <result name="input">/jsp/addMaterial.jsp</result>
   <result name="success">/jsp/showMaterial.jsp</result>
  </action>
 </package>
</struts>

注释:配置文件struts.xml对页面进行导航,匹配action:"addMaterial",交由Action类:AddMaterialAction.java实际处理,处理后导航到相应的结果页面。

addMaterialAction.java:

package com.action;

import com.model.Material;
import com.opensymphony.xwork2.ActionSupport;

public class AddMaterialAction extends ActionSupport {
	//属性类型需要类型转换的对象
	private Material material;

	public Material getMaterial() {
		return material;
	}

	public void setMaterial(Material material) {
		this.material = material;
	}

	public String execute() throws Exception {
		return SUCCESS;
	}
}

注释:此Action类处理提交过来的表单数据。如<s:textfield name="material.bid" label="价格"></s:textfield>,如果在表单中填入的数据为"198.8",则是将name="material.bid"value="198.8" 提交给此Action类处理。通过setMaterial(Material material),将材料类Material的实例material的实例属性bid的值设为"198.8"。
Material.java:

package com.model;
import java.util.Date;

public class Material implements java.io.Serializable {
	// Fields
	private String material;
	private double bid;
	private int mount;
	private Date expireDate;

	public Material() {
	}

	public double getBid() {
		return bid;
	}

	public void setBid(double bid) {
		this.bid = bid;
	}

	public int getMount() {
		return mount;
	}

	public void setMount(int mount) {
		this.mount = mount;
	}

	public String getMaterial() {
		return this.material;
	}

	public void setMaterial(String material) {
		this.material = material;
	}

	public Date getExpireDate() {
		return expireDate;
	}

	public void setExpireDate(Date expireDate) {
		this.expireDate = expireDate;
	}	
}


showMaterial.jsp:

<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2标签库调用声明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>添加材料</title>
        <s:head />
    </head>
    <body>
        <h3 align="left"> 
            Struts2类型转换使用范例 
        </h3>
        <!-- 材料数据显示 -->
            <table>            
                材料名: <s:property value="material.material" ></s:property>
                价格:   <s:property value="material.bid" ></s:property>
                库存量:  <s:property value="material.mount" ></s:property>
                过期日期: <s:property value="material.expireDate" ></s:property>         
            </table>        
    </body>
</html>

注释:注意value="material.xxx",因为Action类处理的是material实例,此处是通过material实例来访问其属性的。

转换过程:在页面按"提交"按钮后,就相当于"setMaterial()"方法。在系统根据struts.xml配置文件执行Action之前,Struts2自带的类型转换拦截器就已经将Material对象中几个属性变量的类型由页面上输入时的String类型转换为Material对象属性变量被定义的数据类型。对数据处理完成后,在页面上显示数据时,是上述操作的逆过程,即完成数据原来的数据类型转换为String类型,然后显示于页面上。

实际上在开发工作中,除非有根据特殊需求需要类型转换之外,在Struts2中绝大部分类型转换都已经由Struts2自己完成。

运行 http://localhost:8080/Convert/jsp/addMaterial.jsp :

“提交”后结果:

你可能感兴趣的:(Struts2 基本数据类型转换的例子 详解析)