Strusts2--课程笔记4
类型转换器:
Struts2默认情况下可以将表单中输入的文本数据转换为相应的基本数据类型。这个功能的实现,主要是由于Struts2内置了类型转换器。这些转换器在struts-default.xml中可以看到其定义。
常见的类型,基本均可由String转换为相应的类型。但是注意:Date只能接收 yyyy-MM-dd或yyyy-MM-dd HH:mm:ss 格式的字符串。
自定义转换器:
1. 代码:
package com.tongji.converter; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.conversion.TypeConversionException;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class MyDateTypeConverter extends DefaultTypeConverter { //value是要转换的数据,且它的类型是字符串数组,因为它要兼容前端传过来的数据,是数组,如checkbox的多选项,或者是单个数据,如text。
//如果是单个数据,在代码中就是取数组中的第一个元素。
//toType是转换成为的数据类型
@Override
public Object convertValue(Object value, Class toType) {
try {
if (toType == Date.class) { //由页面到服务器 是由String到Date类型的转换
String source = ((String[])value)[0];
SimpleDateFormat sdf = getSimpleDateFormat(source);
ActionContext.getContext().getSession().put("sdf", sdf);
return sdf.parse(source);
} else if (toType == String.class) { //数据回显:由服务器到页面 是由Date到String类型的转换
SimpleDateFormat sdf = (SimpleDateFormat) ActionContext.getContext().getSession().get("sdf");
return sdf.format((Date)value);
}
} catch (ParseException e) {
e.printStackTrace();
}
return super.convertValue(value, toType);
} private SimpleDateFormat getSimpleDateFormat(String source) {
SimpleDateFormat sdf = null;
if (Pattern.matches("^\\d{4}/\\d{2}/\\d{2}$", source)) {
sdf = new SimpleDateFormat("yyyy/MM/dd");
} else if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", source)) {
sdf = new SimpleDateFormat("yyyy-MM-dd");
} else if (Pattern.matches("^\\d{4}\\d{2}\\d{2}$", source)) {
sdf = new SimpleDateFormat("yyyyMMdd");
} else {
throw new TypeConversionException();
} return sdf;
} }
其中要注意三点:一是value代表的是一个数组,二是数据类型转换是双向的,因为有数据回显的需求;三是因为判断类型转换失败时,要抛出TypeConversionException异常,以便后续处理。
2.局部类型转换器的配置:
局部类型转换器,仅仅对指定Action的指定属性起作用。注册方式为,在Action类所在包下放置名称为如下格式的属性文件:ActionClassName-conversion.properties文件。其中ActionClassName是Action类名,-conversion.properties是固定写法。
该属性文件的内容遵循以下格式:属性名称=类型转换器的全类名。例如:birthday=com.tongji.converter.MyDateTypeConverter
3. 数据回显的实现:
(1)表单提交的前端代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>index page</title>
</head> <body>
<s:form action="test/login.action" method="POST">
<s:textfield name="age" label="年龄"/>
<s:textfield name="birthday" label="生日"/>
<s:submit value="提交"/>
</s:form>
</body>
</html>
使用Struts2标签来实现
(2)struts2.xml 代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo" namespace="/test" extends="struts-default">
<action name="login" class="com.tongji.actions.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
数据回显实现的关键是,当数据类型转换失败,抛出TypeConversionException 异常后,页面要求跳转到input视图,因此,要配置input视图对应的前端页面。
(3)类型转换异常提示信息的修改:
类型转换异常提示信息,是系统定义好的内容,若直接显示到用户页面,会使页面显得不友好。但,类型转换异常提示信息是可以修改的。步骤如下:
Action所在包中添加名称为ActionClassName.properties的属性文件,其中ActionClassName为Action的类名。在该文件中写入内容:invalid.fieldvalue.变量名=异常提示信息
(4)数据回显最终页面显示结果:

4. 全局类型转换器配置:
全局类型转换器,会对所有的Action的指定类型的属性生效。其注册方式为:在src目录下放置名称为 xwork-conversion.properties 属性文件。该文件的内容格式为:待转换的类型=类型转换器的全类名
java.util.Date=com.tongji.converter.MyDateTypeConverter
Strusts2--课程笔记4的更多相关文章
- Linux内核分析课程笔记(一)
linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...
- (1/18)重学Standford_iOS7开发_iOS概述_课程笔记
写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...
- Andrew Ng机器学习课程笔记--汇总
笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...
- Andrew 机器学习课程笔记
Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- 《CSS动画实用技巧》课程笔记
概述 这是我学习[CSS动画实用技巧][1]的课程笔记 常用动画属性--transition [常用动画属性--transition][2] .change img{ display:block; w ...
- Deeplearning.ai课程笔记--汇总
从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...
- selenium课程笔记
selenium课程笔记第一天(2017-7-1) 一.配置火狐浏览器 运行:firefox.exe -p -no -remote selenium课程笔记第二天 用Eclipse+java+sele ...
随机推荐
- android设备的vpn功能
VPN是什么? VPN:Virtual Private Network,虚拟专用网络:是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术,其实质上就是利用加密技术在公网上封装出一个数据通讯隧 ...
- Wise Registry Cleaner Pro(智能注册表清理) V9.31 绿色版
软件名称: Wise Registry Cleaner Pro(智能注册表清理)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大 ...
- VS发布网站步骤(先在vs上发布网站到新的文件夹,然后挂到iis上面)
VS发布网站步骤(先在vs上发布网站到新的文件夹,然后挂到iis上面) 首先用vs2010打开一个Asp.Net项目, 也可以通过vs菜单->生成->发布网站 选择发布网站的路径 ...
- 怎样成为PHP 方向的一个合格的架构师(转)
突然看到这篇文章, 值得反省, 乐在其中, 在接下来的发展中不被淘汰的都来看看, 如何成为一个架构师先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过.工作经验 ...
- 手动安装VS code 插件
现在安装包: 通过修改下面的地址参数:https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publish ...
- 防范XSS
.net framework4.5 提供了AntiXss类,来防范XSS攻击. 在开放指令的同时过滤危险字符串,使用AntiXss.GetSafeHtmlFragment(html)方法,具体可以参照 ...
- oracle 行专列
首先,做准备工作. 建表 -- Create table create table DEMO ( n_iden NUMBER, c_order_code NVARCHAR2(), c_order_na ...
- js日期操作时间看板
var nowTime = null;//获取服务器时间function GetTime() { $.ajax({ url:config._domain + "/AjaxAuctionCen ...
- ZOJ 1655 FZU 1125 Transport Goods
迪杰斯特拉最短路径. 1.every city must wait till all the goods arrive, and then transport the arriving goods t ...
- 阻塞与非阻塞、同步与异步 I/O模型
I/O模型 Linux 下的五种I/O模型 阻塞I/O(blocking I/O) 非阻塞I/O (nonblocking I/O) I/O复用(select 和poll) (I/O multiple ...