在Struts2.0框架中内置了类型转换器,可以很方便的实现在八大数据类型、Date类型之间的自动转换;此外也可以根据自己的需求自定义数据转换类。如下:

首先看一下项目工程中的目录

1.在新建的web project项目的web Root中新建input.jsp,用来输入用户名和密码

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>My JSP 'input.jsp' starting page</title>
  13.  
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22.  
  23. </head>
  24.  
  25. <body>
  26. <body >
  27.  
  28. <h1>使用分号隔开用户名与密码信息</h1>
  29.  
  30. <form action="userAction.action">
  31.  
  32. user info 1: <input type="text" name="user"><br><!--这里name的属性值名称和UserAction中的Get/Set方法名称对应-->
  33. <input type="submit" value="submit">
  34.  
  35. </form>
  36. </body>
  37. </html>

2.继续在web Root中新建output.jsp页面,用来显示服务端传来的类型转换值(自定义类型--------->String类型)

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
  2. <!-- 通过taglib导入Struts2中自带的标签库 -->
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <%
  5. String path = request.getContextPath();
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  7. %>
  8.  
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  10. <html>
  11. <head>
  12. <base href="<%=basePath%>">
  13.  
  14. <title>显示结果页面</title>
  15.  
  16. <meta http-equiv="pragma" content="no-cache">
  17. <meta http-equiv="cache-control" content="no-cache">
  18. <meta http-equiv="expires" content="0">
  19. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  20. <meta http-equiv="description" content="This is my page">
  21. <!--
  22. <link rel="stylesheet" type="text/css" href="styles.css">
  23. -->
  24.  
  25. </head>
  26.  
  27. <body>
  28. <!-- 获得转到jsp页面之前的user属性 这里的user要和对应action中的user对应-->
  29. <s:property value="user" />
  30. </body>
  31. </html>

3.在新建的web project项目的src中新建com.converter包,并在包中新建一个转换器类,如下图:

并在该UserConverter类中重写public Object convertValue(Map context, Object value, Class toType)函数,如下:

//类型转换方向有页面字符串转换为自定义类型对象,或自定义类型对象转换为字符串

//toType参数代表你需要转换的目标类型

//value参数是具体的需要转换的对象,如果value是页面往自定义类型转,则value应为String[]类型

  1. package com.converter;
  2. import java.util.Map;
  3. import java.util.StringTokenizer;
  4. import ognl.DefaultTypeConverter;
  5. import com.bean.User;
  6. public class UserConverter extends DefaultTypeConverter {
  7.  
  8. @Override
  9. public Object convertValue(Map context, Object value, Class toType) {
  10. if(User.class == toType) //从页面向后台对象转换
  11. {
  12. String[] str = (String[])value; //将获取到的value值转换为字符串数组
  13.  
  14. String firstValue = str[0];
  15.  
  16. StringTokenizer st = new StringTokenizer(firstValue, ";");
  17. /*---------分隔字符串也可以使用一下split方法,效果和上面的方法效果一样
  18. String[] str1=firstValue.split(";");
  19. String username = str1[0];
  20. String password = str1[1];
  21. */
  22. String username = st.nextToken();
  23. String password = st.nextToken();
  24. //创建User,并将转换后的username和password通过setXXX()方法放入到User对象中
  25. User user = new User();
  26.  
  27. user.setUsername(username);
  28. user.setPassword(password);
  29.  
  30. return user;
  31. }else if(toType == String.class){ //从服务器转到前端
  32. //将value类型从object强制转换成User对象
  33. User user = (User)value;
  34. String username = user.getUsername();
  35. String password = user.getPassword();
  36. String userInfo = "username = " + username + ", password = " + password;
  37. return userInfo;
  38. }
  39. return null;
  40. }
  41.  
  42. }

4.在src中创建com.LHB.bean包并在包中创建User.java的bean

  1. package com.LHB.bean;
  2. public class User {
  3.  
  4. private String username;
  5. private String password;
  6. public String getUsername() {
  7. return username;
  8. }
  9. public void setUsername(String username) {
  10. this.username = username;
  11. }
  12. public String getPassword() {
  13. return password;
  14. }
  15. public void setPassword(String password) {
  16. this.password = password;
  17. }
  18. }

5.创建com.action包,在包建UserAction.java

  1. package com.action;
  2.  
  3. import com.bean.User;
  4. import com.opensymphony.xwork2.ActionSupport;
  5.  
  6. public class UserAction extends ActionSupport {
  7.  
  8. private User user;
  9.  
  10. public User getUser() {
  11. return user;
  12. }
  13.  
  14. public void setUser(User user) {
  15. this.user = user;
  16. }
  17.  
  18. @Override
  19. public String execute() throws Exception {
  20. System.out.println("username = " + user.getUsername());
  21. System.out.println("password = " + user.getPassword());
  22. return SUCCESS;
  23. }
  24.  
  25. }

6.配置struts.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <!-- 设置Struts运行模式为开发者模式,如果value为false则关闭开发者模式 -->
  7. <constant name="struts2.devMode" value="true"></constant>
  8. <package name="default" namespace="/" extends="struts-default">
  9.  
  10. <action name="userAction" class="com.action.UserAction">
  11. <!-- <result name="input">/upload.jsp</result> -->
  12. <result name="success">/output.jsp</result>
  13. </action>
  14. </package>
  15. </struts>

7.在com.action包下新建UserAction-conversion.properties属性文件配置User的转换信息找到对应的转换器类

注意:这里的属性文件名称命名是有规则的,XXXAction-conversion.properties中的XXX必须是对应action的文件名

user:表示需要转换的属性名,要执行的转换服务的转换器路径

8.结果:

用户信息输入

从页面String类型转换到服务器端自定义User类型在控制台中显示的结果信息

从服务器端的User类型转换为页面的String类型,结果显示在output.jsp页面中。如下:

struts2.0自定义类型转换的更多相关文章

  1. [Struts2学习笔记] -- 自定义类型转换

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. Struts2自定义类型转换,和处理类型转换错误

    Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...

  3. java struts2入门学习---自定义类型转换

    自定义类型转换器的作用就是将struts无法识别的类型转换成自己所需要的. 比如输入:广东-东莞-虎门,对应的输出时能输出:广东省 东莞市 虎门(镇/区) 这里涉及到的知识点即是将String转换为任 ...

  4. struts2异常处理及类型转换

    一.struts2对异常的处理 1.自定义局部异常: <action> <exception-mapping result="sonException" exce ...

  5. struts2学习笔记(3)——struts2的局部类型转换

    今天又学到了一个新的东西,就是struts2的类型转换. 为什么要类型转换? 今天我就要传一个点的坐标给你,保存时用一个自定义的Point类来保存. 因为在表单里面传过去的是字符串,如“12,23”, ...

  6. (转)struts2.0配置文件、常量配置详解

    一.配置: 在struts2中配置常量的方式有三种: 在struts.xml文件中配置 在web.xml文件中配置 在sturts.propreties文件中配置 1.之所以使用struts.prop ...

  7. Struts2中的类型转换

    1.     Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概 ...

  8. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  9. C#构造函数、操作符重载以及自定义类型转换

    构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...

随机推荐

  1. 微信小程序image组件中aspectFill和widthfix模式应用详解

    aspectFill 与 widthfix 都是保持宽高比不变 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来.也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发 ...

  2. MyBatis中choose when正确写法

    <choose> <when test="scoreRange!=null and scoreRange eq 1"> AND sc.score <! ...

  3. [skill][c][ld][gcc] 明确指定gcc在链接时明确使用静态库

    通常,我们这样链接: gcc -o a.out -L/usr/lib/ -ltest a.o 这样它会链接动态库 libtest.so,  可是有时候我们想在静态库与动态库同时存在时,优先使用静态库. ...

  4. AndrewNG Deep learning课程笔记 - RNN

    The Unreasonable Effectiveness of Recurrent Neural Networks,http://karpathy.github.io/2015/05/21/rnn ...

  5. day3_字典

    一.说明 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: dict = {key1:value1,key2 ...

  6. 查找->动态查找表->哈希表

    文字描述 哈希表定义 在前面讨论的各种查找算法中,都是建立在“比较”的基础上.记录的关键字和记录在结构中的相对位置不存在确定的关系,查找的效率依赖于查找过程中所进行的比较次数.而理想的情况是希望不经过 ...

  7. 洛谷P3722 影魔 [AH2017/HNOI2017] 线段树+扫描线

    正解:线段树+扫描线 解题报告: 传送门! 先理解一下这道题,大概是这样儿的: 对于一个点对,如果他们的两端是这段区间的最大值和次大值,那么他们会有p1的贡献 如果他们的两端是最大值和一个非次大值,那 ...

  8. 天梯赛训练2 7-8 矩阵A乘以B

    知道矩阵A*B的规则按照规则来做就好了 #include <bits/stdc++.h>#include <stdio.h>using namespace std;int a[ ...

  9. centos 关闭selinux

    将SELINUX配置文件设置为 disabled 模式,禁用SELinux vim /etc/selinux/config SELINUX=disabled 然后reboot重启生效 setenfor ...

  10. 前端 HTML 标签分类

    三种: 1.块级标签: 独占一行,可设置宽度,高度.如果设置了宽度和高度,则就是当前的宽高.如果宽度和高度没有设置,宽度是父盒子的宽度,高度根据内容填充. 2.行内标签:在一行内显示,不能设置宽度,高 ...