这里以转换点坐标为例

1.首先建一个input.jsp文件

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
  2.  
  3. <!-- struts 标签库的引入  --> 
  4. <%@ taglib uri="/struts-tags" prefix="s" %> 
  5.  
  6.  
  7. <% 
  8. String path = request.getContextPath(); 
  9. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
  10. %> 
  11.  
  12. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  13. <html> 
  14.   <head> 
  15.     <base href="<%=basePath%>"
  16.      
  17.     <title>My JSP 'input.jsp' starting page</title> 
  18.      
  19.     <meta http-equiv="pragma" content="no-cache"
  20.     <meta http-equiv="cache-control" content="no-cache"
  21.     <meta http-equiv="expires" content="0">     
  22.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
  23.     <meta http-equiv="description" content="This is my page"
  24.     <!-- 
  25.     <link rel="stylesheet" type="text/css" href="styles.css"
  26.     --> 
  27.  
  28.   </head> 
  29.    
  30.   <body> 
  31.    <h1>输入一个点的坐标,以逗号隔开</h1> 
  32.     <!-- ---------  这是普通方式进行表单输入 
  33.     
  34.     <form action="" method="post"
  35.     point: <input type="text" name="point" size="20"><br> 
  36.     username: <input type="test" name="username" size="20"><br> 
  37.     bithday: <input type="text" name="bithday"><br> 
  38.      
  39.      
  40.     date: <input type="text" name="date" size="20">   <br> 
  41.     <input type="submit" value="submit"
  42.      
  43.     </form> 
  44.      
  45.      
  46.     --> 
  47.      
  48.     <!-- 用struts2 标签库的标签进行设置表单  --> 
  49.      
  50.     <s:form action="converterAction.action" > 
  51.      
  52.         <s:textfield name="point" label="point"></s:textfield> 
  53.         <s:textfield name="point2" label="point2"></s:textfield> 
  54.         <s:textfield name="username" label="username"></s:textfield> 
  55.         <!--   
  56.         <s:password name="password" label="password"></s:password> 
  57.         --> 
  58.         <s:textfield name="age" label="age"></s:textfield> 
  59.          
  60.         <s:textfield name="birthday" label="birthday"></s:textfield> 
  61.          
  62.         <s:submit name="submit" label="submit"></s:submit> 
  63.         <!--  
  64.         <s:reset name="resert" label="resert"></s:reset> 
  65.           --> 
  66.          
  67.     </s:form> 
  68.     
  69.      
  70.   </body> 
  71. </html> 

2.定义一个action处理类名为PointAction.java

 

  1. package com.test.action; 
  2. import java.util.Date; 
  3.  
  4. import com.opensymphony.xwork2.ActionSupport; 
  5. import com.sun.org.apache.regexp.internal.recompile; 
  6. import com.test.bean.Point; 
  7. //要实现复杂功能,action都要继承 ActionSupport这个父类,所以以后尽量都要继承这个父类 
  8. public class PointAction extends ActionSupport{ 
  9.      
  10.     private Point point; 
  11.     private Point point2; 
  12.     private int age; 
  13.     private String username; 
  14.     private Date birthday; 
  15.     public Point getPoint() { 
  16.         return point; 
  17.     } 
  18.     public void setPoint(Point point) { 
  19.         this.point = point; 
  20.     } 
  21.     public Point getPoint2() { 
  22.         return point2; 
  23.     } 
  24.     public void setPoint2(Point point2) { 
  25.         this.point2 = point2; 
  26.     } 
  27.     public int getAge() { 
  28.         return age; 
  29.     } 
  30.     public void setAge(int age) { 
  31.         this.age = age; 
  32.     } 
  33.     public String getUsername() { 
  34.         return username; 
  35.     } 
  36.     public void setUsername(String username) { 
  37.         this.username = username; 
  38.     } 
  39.      
  40.      
  41.     public Date getBirthday() { 
  42.         return birthday; 
  43.     } 
  44.     public void setBirthday(Date birthday) { 
  45.         this.birthday = birthday; 
  46.     } 
  47.     public String execute() { 
  48.         return "success"
  49.     } 
  50.      
  51.  

3.接下来配置struts.xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts SYSTEM "struts-2.3.dtd"> 
  3.  
  4. <!-- PUBLIC 
  5.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
  6.     "http://struts.apache.org/dtds/struts-2.3.dtd"  --> 
  7.     <struts> 
  8.      
  9.         <package name="struts2" extends="struts-default"> 
  10.          
  11.             <action name="helloword" class="com.test.action.helloWorld"> 
  12.                 <result name="success">/helloworld.jsp</result> 
  13.             </action>  
  14.              
  15.             <action name="logon" class="com.test.action.logonAction"> 
  16.                 <result name="success" >/result.jsp</result> 
  17.  
  18.             </action> 
  19.              
  20.             <action name="converterAction" class="com.test.action.PointAction"> 
  21.              
  22.                 <result name="success">/output.jsp</result> 
  23.              
  24.             </action> 
  25.  
  26.         </package> 
  27.          
  28.  
  29.     </struts> 

*****记住:该xml文件中action中name="converterAction"要与上面的input.jsp文件中action="converterAction.action" 名字相同,否则会出错。

4.接下来就是进行类型转换了,一般struts2类型转换都是与PoiontAction类分离

先建一个自定义类Point

 

  1. package com.test.bean; 
  2.  
  3. public class Point 
  4.     private int x; 
  5.      
  6.     private int y; 
  7.  
  8.     public int getX() 
  9.     { 
  10.         return x; 
  11.     } 
  12.  
  13.     public void setX(int x) 
  14.     { 
  15.         this.x = x; 
  16.     } 
  17.  
  18.     public int getY() 
  19.     { 
  20.         return y; 
  21.     } 
  22.  
  23.     public void setY(int y) 
  24.     { 
  25.         this.y = y; 
  26.     } 
  27.      
  28.     @Override 
  29.     public String toString() 
  30.     { 
  31.         String result = "x: " + x + " y: " + y; 
  32.         return result; 
  33.     } 

5.接下来定义转换处理类

 

  1. package com.test.converter; 
  2. import java.util.Map; 
  3.  
  4. //import javax.persistence.criteria.CriteriaBuilder.In; 
  5.  
  6. import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; 
  7. import com.test.bean.Point; 
  8.  
  9. //该类要想使用,必须和struts2进行关联,必须继承一个父类 
  10. //该父类存在于,struts2所添加的ognl包中,为DefaultTypeConverter类 
  11. //并实现 convertValue(Map,Object,class)类 
  12.  
  13. public class PointConverter extends DefaultTypeConverter{ 
  14.  
  15.     @Override 
  16.     public Object convertValue(Map<String, Object> context, Object value, 
  17.             Class toType) { 
  18.         //这是两个方向,这是类方向 
  19.         if (Point.class==toType) { 
  20.             String[] str=(String[])value; 
  21.              
  22.             String firstValue=str[0]; 
  23.              
  24.             String[] resultValue=firstValue.split(","); 
  25.              
  26.             Point point=new Point(); 
  27.             point.setX(Integer.parseInt(resultValue[0])); 
  28.             point.setY(Integer.parseInt(resultValue[1])); 
  29.             return point; 
  30.         } 
  31.         else if (String.class==toType) { 
  32.              
  33. //          Point point=new Point(); 
  34. //          int x=(int) point.getX(); 
  35. //          int y=(int) point.getY(); 
  36.             Point point=(Point)value; 
  37.             int x=(int)point.getX(); 
  38.             int y=(int)point.getY(); 
  39.              
  40.             String result="x:"+x+"y:"+y; 
  41.             return result;  
  42.         }  
  43.         return null
  44.     } 
  45.      

然后建一个file,就是配置文件PointAction-conversion.properties进行把转换处理类和PointAction类关联起来,每写一个这样的配置文件,名字都和action类的名字相同,后面(-conversion.properties)的不变

该配置文件内容如下:

  1. point=com.test.converter.PointConverter 
  2. point2=com.test.converter.PointConverter 
  3. #point=com.test.converter.PointConverter 

其中,point为要转换的类型,与PointAction类中的point相同,=右面就是和Pointaction分离开的转换类了