<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1878664591; mso-list-type:hybrid; mso-list-template-ids:1483508758 -345707340 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-number-format:japanese-counting; mso-level-text:%1、; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
Struts2 类型的转换 ( 一 )
首先先做一个简单的实验,从客户端输入一些不同类型的信息 然后在服务端接受并做类型转换然后再显示到客户端
因为客户端用户提交的信息都是以字符串的形式被接受的 因此当客户端需要对提交的信息进行处理时就需要进行类型的转换
一、 新建一个 input.jsp 文件 用户提交 对象,字符串,整形,日期类型的信息
<%@ taglib prefix = "s" uri = "/struts-tags" %>
< body >
< s:form action = "converter" >
< s:textfield name = "username" label = "username" ></ s:textfield >
< s:textfield name = "age" label = "age" ></ s:textfield >
< s:textfield name = "point" label = "point" ></ s:textfield >
< s:textfield name = "date" label = "date" ></ s:textfield >
< s:submit ></ s:submit >
</ s:form >
</ body >
注: point 要求输入的是一个点的坐标信息 以 ,隔开
二、 建立处理提交信息的 action 继承自 ActionSupport
public class PointAction extends ActionSupport {
private Point point ;
private String username ;
private int age ;
private Date date ;
public Point getPoint() {
return point ;
}
public void setPoint(Point point) {
this . point = point;
}
public String getUsername() {
return username ;
}
public void setUsername(String username) {
this . username = username;
}
public int getAge () {
return age ;
}
public void setAge( int age) {
this . age = age;
}
public Date getDate() {
return date ;
}
public void setDate(Date date) {
this . date = date;
}
@Override
public String execute() throws Exception {
//SUCCESS 实际上就是等于 "success"
return SUCCESS ;
}
}
注: execute 方法中返回的值 SUCCESS 是规定好的值实际上也就是等于 “success” Struts2 只是为了方便而将这些值定义好了 , 还可以有 ERROR , INPUT, LOGIN, NONE
三、 配置 struts.xml 文件 在 package 标签中加入一个 action 标签
< action name = " converter " class = "com.cgz.struts2.test02.action.PointAction" >
< result name = "success" > /02_typeConvertion/output.jsp </ result >
</ action >
当 action 执行结束后跳转到 output.jsp
四、 创建一个点坐标 Point 的实体类 , 用它来设置和取得参数
package com.cgz.struts2.test02.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;
}
}
五、 新建一个 PointConverter 类 并继承自 ognl 的 DefaultTypeConverter 类 , 该类用来进行坐标的类型转换
package com.cgz.struts2.test02.converter;
import java.util.Map;
import com.cgz.struts2.test02.bean.Point ;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
public Object convertValue(Map context, Object value , Class toType ) {
// 从客户端获取
if (Point . class == toType) {
Point point = new Point ();
// 获取的 value 是一个字符串数组
String[] str = (String[])value;
// 将该数组中的第一个元素用 , 分隔开
String[] paramValues = str[0].split( "," );
// 将字符型转换为 int 类型
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 ;
}
}
注:其中的 toType 目标类型 value 是自客户端接受的参数
根据 point 类型的不同做相应的转换
六、 要想使用该类型转换的类 就需要让 action 知道用这个类 此时需要在 action 所在的包下 建立一个资源文件
point= com.cgz.struts2.test02.converter.PointConverter
注: poin 表示要进行自定义类型转换的属性 后面是对该属性进行类型转换的类
七、 建立 output.jsp 用于显示客户端接受来的信息
<%@ taglib prefix = "s" uri = "/struts-tags" %>
< body >
<!-- value 匹配 action 中的 getter 方法中的属性 而不是开始定义的属性 -->
point: < s:property value = "point" />< br >
username: < s:property value = "username" />< br >
age: < s:property value = "age" />< br >
date: < s:property value = "date" />< br >
</ body >
流程: 1 、用户通过表单将信息提交 表单中设置了 action= “ action 信息”
2 、 action 信息匹配 struts.xml 中的 action 标签中的 name 值 , 而 class 值表示处理该请求的 action 类
3 、 struts.xml 将提交信息 引导至正确的 action 中,通过提交的属性匹配 action 中的 setter 方法 将 action 中的属性赋值 . 同时匹配 setter 方法时 将自动检查 action 所在包下有没有关于该 setter 所对应的属性的资源文件,有则转到处理该属性类型转换的 converter 类中 converter 类通过 action 中的 setter 获取此时属性的类型 将其赋给 toType
此时将属性值转换为 int 类型并设置到 Point 中 , 并返回 Point 此时已经通过 converter 将 Point 值设置好了 在返回到 action 中 setter 方法将 converter 返回的 point 设置到实体类中 .
4 、 在 output.jsp 中 在显示 point 值时 将通过 action 中的 getter 方法来获取 point 的值 同样的 getter 方法执行前 检查 point 属性有没有自定义的类型转化 通过资源文件找到 converter 类 同时因为是分业务器端向客户端的显示 此时 toType 应该是 String 类型的转化 执行返回 一个 result 返回给 getter 方法 并设置到客户端显示
5 、对于 String int Date 类型 Stuts2 会自行转换
Struts2类型转化(一)
最新推荐文章于 2020-08-28 16:32:35 发布