`
heavyliu
  • 浏览: 13085 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts2学习3 ---局部类型转换

阅读更多

1. 项目树形图如下:

在昨天的基础上,今天学习了局部类型转换,新增加了几个文件,分别是input.jsp; output.jsp; PointAction.java;

Point.java; PointConverter.java;  PointAction-converter.properties;

 


 2. 代码部分:

2.1 input.jsp:

</head>
  <h3><font color="red">使用逗号将point的两个坐标分隔开</font></h3>
  <body> 
    <s:form action="pointConverter">
    
    <s:textfield name="username" label="username"></s:textfield>
    <s:textfield name="point" label="point"></s:textfield>
    <s:textfield name="date" label="birthday"></s:textfield>
    <s:textfield name="age" label="age"></s:textfield>
    <s:submit name="submit"></s:submit>
    
    </s:form>     
  </body>

 

2.2 Point.java:

package com.test.bean;
public class Point 
{
     private int x;
     private int y;
}

   PS: getter and setter here are omited for save spaces

 

2.3 PointAction.java:

public class PointAction extends ActionSupport 
{
	private Point point;
	private int age;
	private String username;
	private Date date;
               @Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
}

 为了节省篇幅,上述的各个属性的getter,setter方法就再次省略,但是在真正的项目代码中显然必不可少! 

 

2.4:PointAction-converterProperties

point=com.test.converter.PointConverter

 

2.5: struts.xml:

 

</action>   
<action name="pointConverter" class="com.test.action.PointAction">
<result name="success">/output.jsp</result>
</action>

  

2.6: PointConverter.java:

public class PointConverter extends DefaultTypeConverter{

	@Override
public Object convertValue(Map context, Object value, Class toType) {
        if(Point.class == toType)//要转换成的类型叫做Point
	{
		Point point=new Point();
		String[] str= (String[])value;//向下类型转换!!
		String[] paramValue = str[0].split(",");
			
		int x=Integer.parseInt(paramValue[0]);
		int y=Integer.parseInt(paramValue[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;
      }
}

 

 

3. 注意事项:

3.1 properties文件的建立:

  在建立类型转换的properties文件的时候,首先要明确,是要转换哪一个Action文件中的那一个变量,从而,在建立属性文件时,此文件的名称必须按照《此ACTION类名+‘-conversion.properties’》的格式,并且建立在此Action所在的包下

  例如,在上例中,我们是想对PointAction中的Point进行类型转换,所以,我们在PointAction.java所在的包:

com.test.Action包下,建立名字为PointAction-conversion.properties的文件。

 

3.2 PointConverter代码解释:

首先,此类继承了,DefaultTypeConverter类,并且我们重写了 Public Object convertValue(Map context, Object value, Class toType)函数

其中函数中的参数toType是用来判断,类型转换的方向

if(Point.class == toType) 表示,要将要转换成Point类型(也就是将客户端传来的String转成Point)

if(String.class==toType) 表示,转换的目标类型为String(也就是将某Object转换成显示在客户端的String类型)

 

String[] str= (String[])value;为什么将Value要看做是一个String的数组,而不看成单一的一个String类型变量,是因为,虽然在Input.jsp文件中,point传回来的只是一个String变量,但是,估计到整个开发的环境如果很庞大的话,难免会有多个叫做Point的空间,会在同一个.jsp文件中,也就是会同一时间有多个Point往服务器传值,所以,写成一个String数组来接受,是有一定道理的这个部分是结合视频老师中的描述,和自己的猜想得到的,不一定正确,如果有高人发现错误,或者有更精确的见解,欢迎拍砖,指点!)

3.3 整个运作的流程:

1. 首先,用户在客户端的界面上输入 按格式要求的数据。如图:

 



 

 

2.  A.  在input.jsp文件中,找到Action=“pointConverter”  

     B.  然后结合struts.xml文件中的“

<action name="pointConverter" class="com.test.action.PointAction">”进入PointAction.java文件。

     C.  通过结合input.jsp中的name属性后面的字符串与PointAction类中的每一个set方法的方法名对应的机制,将页面传来的字符串值,setter给对应的变量。但是因为,客户端传来的都是String类型的,严格意义上讲,只有在setUsername(String user)的时候不用类型转换,不过,struts已经包含一些非常基础的默认的方法,来进行一些基本的stirng<--->int; String<--->date等等之间的转换,所以在这里我们需要手动添加的类型转换只有private point;

    例如,当流程刚转入到PointAction的时候:

    struts帮助我们,将input.jsp中的<s:textfield name="username" label="username">和PointAction.java中代码public void setPoint(Point point)的两处红色标记,从而进行匹配。然后,同时回去查找com.test.Action的包中,是否存在有PointAction开头的conversion.properties文件

    找到后,进入此文件,查找是哪个属性需要类型转换,根据代码:

    point=com.test.converter.PointConverter一看,发现是point变量,从而进入=号右边的文件,继续执行,类型转换。将转换好的格式存入Point point对象中

    等到,Action执行完execute函数,跳转到output.jsp时,又通过上述介绍的比对方是,将.jsp文件中的name属性和getter方法getXXX的XXX进行比较,将服务器的值传回给jsp,当然在执行getter的时候,同样会查询是否有类型转换。方法,以此类推。

 

 

4.  最后显示结果 如图:



 

 

 

  • 大小: 10.4 KB
  • 大小: 5.6 KB
  • 大小: 2.1 KB
0
1
分享到:
评论

相关推荐

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

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

    Struts2-core-2.1.8.1.jar

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

    struts2(1-7)源码 struts2学习入门 源码学习

    struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter struts5 增加集合类型,使用范型 ...

    struts2自定义数据类型转换练习

    本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...

    struts2简单实例(类型转换方法对比)

    `struts2test2`可能展示了局部类型转换的应用,`struts2test4`可能是关于全局类型转换的实例,而`struts2test3`可能用于演示处理大量数据类型的转换。通过查看和运行这些代码,你可以更直观地理解每种转换方法的实现...

    struts2-jar包

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

    第2讲 --Struts2的类型转换

    Struts2的类型转换机制还支持全局转换和局部转换。全局转换适用于整个应用,而局部转换只对特定的Action或Action的某个属性有效。全局转换可以通过在struts.xml配置文件中定义`&lt;conversion&gt;`元素,或者在Action配置...

    Struts2自定义类型转换

    Struts2的自定义类型转换可以分为两大类:局部类型转换和全局类型转换。 - **局部类型转换**:针对特定Action或实体类的类型转换,适用于特定场景下的数据处理。进一步分为: - 普通实体bean的自定义类型转换:...

    struts2-处理类型转换

    在处理用户输入和业务逻辑交互时,Struts2提供了强大的类型转换和校验机制,以确保数据的有效性和安全性。以下是对给定内容的详细解释: **类型转换** 在Struts2中,当用户通过表单提交数据时,所有参数默认都以...

    struts2类型转换和国际化

    3. 在调用setter方法前,Struts2会检查该属性是否有自定义的类型转换器。如果存在,它会在Action同级目录下的`action名称-conversion.properties`文件中查找转换规则。若在`src`目录下的`-conversion.properties`...

    struts2注册转换器

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。...这个案例提供了一个很好的学习点,帮助开发者更好地理解和利用Struts2框架的类型转换机制,提高代码的健壮性和可维护性。

    Struts2权威指南--基于WebWork核心的MVC开发(我自己敲的代码)

    WebWork是Struts2的基础,它的核心特性包括动作调度、类型转换、异常处理、国际化、标签库等。WebWork引入了OGNL(Object-Graph Navigation Language)表达式语言,使得在Action和视图之间传递数据更为简便。 3. *...

    struts2学习笔记四(第4讲.Struts2的类型转换续)

    在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...

    实验4 Struts2的类型转换与OGNL表达式语言.doc

    ### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换...

    ajax-struts2需要的3个包

    以下是对"ajax-struts2需要的3个包"的详细解释: 1. **json.js**: 这是一个JavaScript库,用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    Struts 2.1-AJAX-JSON实例

    在Struts 2中,AJAX(Asynchronous JavaScript and XML)技术和JSON(JavaScript Object Notation)的结合使用,允许开发人员实现页面的局部更新,提升用户体验,而无需每次请求都刷新整个页面。 **AJAX** 是一种在...

    struts2学习笔记

    ### Struts2学习笔记知识点详解 #### 一、基础知识 **1. Struts2核心组件** - **XWork-2.0.5.jar**: 引入WebWork框架的核心功能,这是Struts2的一个重要组成部分,提供了请求处理的核心逻辑。 - **Commons-...

    struts2 dwr ajax 配置 局部刷新

    Struts2、DWR(Direct Web Remoting)和Ajax是Web开发中的关键技术,它们结合使用可以实现页面的局部刷新,提高用户体验。Struts2是一个基于MVC设计模式的Java Web框架,DWR则是一个用于简化AJAX开发的库,允许前端...

    Struts2学习文档,Struts入门学习资料

    Struts2提供自动类型转换机制。在Action中,Struts会尝试将客户端提交的数据转换为相应的属性类型。如果需要自定义转换,可以在`conversion.properties`文件中指定转换器类。转换器可以是局部的,针对特定Action,也...

    Struts2学习文档

    ### Struts2学习文档知识点详解 #### 一、Struts2 Action **1.1 Action通过ActionContext间接访问Servlet API** - **概念介绍**:在Struts2框架中,Action对象可以通过`ActionContext`来间接访问到Servlet API,...

Global site tag (gtag.js) - Google Analytics