`

局部类型转换——Point

阅读更多

这里用一个例子介绍局部类型转换:

1.先在MyEclipse里面新建一个WebApp文件,我这里取名为:struts_converter

2.导入struts2的jar包

3.配置web.xml过滤器Filter

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<filter>
		<filter-name>struts</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

4.新建一个input.jsp文件

<body>
	<h3>使用逗号将点的两个坐标分开</h3>
		<s:form method="post" action="pointConverter.action" >
			<s:textfield name="point" label="Point"></s:textfield>
			<s:textfield name="age" label="Age"></s:textfield>
			<s:textfield name="username" label="Username"></s:textfield>
			<s:textfield name="birthday" label="Birthday"></s:textfield>
			<s:submit label="SUBMIT"/>
		</s:form>
	</body>

5.新建一个PointAction类

public class PointAction extends ActionSupport {
	private static final long serialVersionUID = 5497987645500599609L;
	private Point point;
	private int age;
	private Date birthday;
	private String username;
                  //getter()和setter()
}

6.新建一个Point类

package com.zchen.struts.bean;

public class Point {

	private int x;
	private int y;
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	
}

7.写一个Converter类

package com.zchen.struts.converter;

import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
import com.zchen.struts.bean.Point;

public class PointConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		if(Point.class == toType){  //判断目标类型是那种类型(从字符串数组转换到对象)
			Point point = new Point();
			String[] str = (String[])value;//取得的值是一个数组(通用性考虑)
			String[] paramValues = str[0].split(",");
			int x = Integer.parseInt(paramValues[0]);
			int y = Integer.parseInt(paramValues[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;
	}
	
}

 

5.com.zchen.struts.action包下面建一个"PointAction-conversion.properties"也就是和PointAction类在同一个目录下。

   在文件里面写: point=com.zchen.struts.converter.PointConverter

6.配置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>
	<constant name="struts.devMode" value="true" />
	<package name="login" extends="struts-default" >
		<action name="pointConverter" class="com.zchen.struts.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
	</package>
</struts>

 

7.新建一个跳转页面

 <body>
   	point:<s:property value="point"/><br>
   	age:<s:property value="age"/><br>
   	username:<s:property value="username"/><br>
  	birthday:<s:property value="birthday"/><br>
  </body>

 

这里简要概述一下运行流程:

      1.tomcat在运行过程中先根据input.jsp页面的action判断确认运行的是struts,找到web.xml—Filter—struts.xml

      2.在struts.xml中找出要跳转到的类:PointAction

      3.根据set方法自动将jsp页面的表单属性name值赋值给对应的setter方法(所以命名要规范)

      4.发现有对象的时候Point,找出有没有对应的Converter即根据properties配置文件找到PointConverter类。

      5.DefaultTypeConverter判断目标类型是哪一种,由于jsp页面所填的都是String类型所以在这里调用的是if       (Point.class == toType)方法,将字符串转换成Point对象并return point对象。

      6.再次就已经将jsp页面的属性全部给队员的属性赋值。

      7.调用execute()方法返回SUCCESS

      8.struts.xml根据返回类型跳转到:output.jsp页面

      9.输出显示(在栈中查找<s:dubug>模式可以看到)

      10.当遇到对象类型的时候,重复第4步调用if(String.class == toType){}方法

      11.将对象类型转换成String

说明:struts内置的转换器会将String转换成int date...类型所以不必写转换器。

分享到:
评论

相关推荐

    基于深度学习的3D点云数据处理——开上之作PointNet模型【Pytorch版】.zip

    传统的深度学习方法多依赖于将3D数据转换为网格或图像表示,但这样的预处理步骤可能导致信息损失。PointNet则首次提出了一种端到端的学习模型,能够直接处理不规则的3D点集,具有对输入点顺序不变性的优点。 Point...

    c# 老师在网络课堂上给我们的电子资源—— 教案

    - C#支持隐式类型转换(自动类型提升,如从小范围类型到大范围类型)和显式类型转换(强制类型转换,如从大范围类型到小范围类型,可能需要使用`Convert`类或类型名后跟`( )`进行转换)。 6. **变量的作用域** - ...

    Force at a point in the interior of a semi-infinite solid

    综上所述,“Force at a point in the interior of a semi-infinite solid”这一主题涉及到了经典固体力学中非常重要的问题——即如何在半无限大固体内部施加集中力时准确计算其产生的应力和位移分布。通过对Mindlin...

    将卷积运算转换成矩阵相乘

    通常,卷积运算可以被理解为一种特殊的矩阵乘法——称为互换乘法(Matrix-Vector Multiplication,MVM)。这个过程可以有效地实现并优化,特别是在大规模的数据处理中。 在传统的矩阵乘法中,我们有两个矩阵A和B,...

    PCL学习笔记——NormalEstimation估计点云的法向量_代码.zip

    在PCL(Point Cloud Library)的学习过程中,Normal Estimation是一个重要的环节,特别是在自动驾驶和无人驾驶领域。这个过程主要是为了计算点云数据中每个点的法向量,这些法向量提供了表面的方向信息,对于后续的...

    基于局部注意力机制的三维牙齿模型分割网络.docx

    针对现有方法在牙齿边缘区域分割不准确的问题,本文提出了一种新的分割网络——基于局部注意力机制的三维牙齿模型分割网络。该网络的主要特点如下: 1. **多尺度局部空间区域构建**:通过三维网格数据形式构建多...

    宋劲杉--Linux C编程一站式学习2009.3.13版本——-免积分!!!

    - **类型转换**:在不同数据类型之间转换。 - **Integer Promotion**:某些情况下自动提升较小的整数类型到int。 - **Usual Arithmetic Conversion**:在算术运算中发生的标准类型转换规则。 **16. 运算符详解** - ...

    宋劲杉--Linux C编程一站式学习2009.4,24版本——-免积分!!

    - **类型转换**: 详述不同类型间的转换规则。 3. **运算符详解** - **位运算**: 讲解按位与、或、异或、取反、移位等运算。 - **其他运算符**: 介绍复合赋值、条件、逗号等运算符。 - **SideEffect与Sequence...

    struts2学习笔记!

    局部类型转换** - 在某些情况下,可能需要自定义类型转换器来处理特定类型的转换。 - **示例**:假设我们需要创建一个`HelloAction`类,并且需要一个转换器`HelloConverter`。 - 创建`HelloAction`类,并在`...

    DCS分散控制系统中英文对照

    44. LVDT —— 线性位移差动转换器 (Linear Variable Differential Transformer):一种用于测量位移的传感器。 45. UMS —— 机组主控顺序 (Unit Main Control Sequence):控制机组启动、运行和停机的顺序。 46. ...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    主函数中创建了多个 `ClassA` 类型的对象,并尝试进行类型转换。 **解析**:在这个例子中,我们需要考虑 Java 中的类型转换规则。Java 支持向上转型,即子类对象可以赋值给父类引用;但向下转型需要确保子类对象...

    Linux-C-编程一站式学习

    - **复合数据类型——结构体**:一种数据类型,可以包含不同类型的数据项。 - **数据抽象**:隐藏数据实现细节的过程,只暴露必要的接口。 - **数据类型标志**:用于描述数据类型的属性,如大小、对齐方式等。 - **...

    颜色分类leetcode-point-cloud-donkey:基于霍夫空间的点云最近邻对象识别管道

    的知识产权(取自并转换为点云)。 描述 Point-cloud-donkey 是一个基于点云分类的可定制管道。 开发始于将隐式形状模型 (ISM) [1] 算法应用于点云数据。 代码中仍然有很多对 ISM 的引用。 随着时间的推移,该框架...

    Linux+C编程一站式学习

    - **复合数据类型——结构体**: 介绍结构体的定义及其成员变量的访问方法。 - **数据抽象**: 探讨数据隐藏的重要性及其实现机制。 - **数据类型标志**: 分析不同类型标志的用途。 - **嵌套结构体**: 展示结构体内...

    Linux 一站式编程(宋劲杉)

    - **编译器如何处理类型转换**:说明编译器在处理类型转换时的策略。 #### 16. 运算符详解 - **位运算** - **按位与、或、异或、取反运算**:介绍位运算符的使用方法。 - **移位运算**:解释左移和右移运算符的...

Global site tag (gtag.js) - Google Analytics