局部类型转换——Point

本文通过实例介绍如何在Struts2框架中实现局部类型转换,包括创建WebApp、配置过滤器、搭建表单及自定义转换器等步骤,并详细解释了运行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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...类型所以不必写转换器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值