Struts2自定义类型转换,和处理类型转换错误
Struts2自定义类型转换:
从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器:
例:
我有一个Point类型:
package cn.jnit.bean;
public class Point {
private Integer x;
private Integer y;
public Point() {
}
public Point(Integer x, Integer y) {
this.x = x;
this.y = y;
}
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
public Integer getY() {
return y;
}
public void setY(Integer y) {
this.y = y;
}
}
测试类型转换器:我前台的struts表单
<s:form action="point" method="post">
<s:textfield name="point"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
<%-- <s:property value="point"/> --%>
表单对应的Action:
package cn.jnit.action;
import cn.jnit.bean.Point;
import com.opensymphony.xwork2.ActionSupport;
public class ConvertAcion extends ActionSupport{
private Point point;
@Override
public String execute() throws Exception {
System.out.println(point.getX());
System.out.println(point.getY());
return SUCCESS;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
我们找到xwork-core-2.2.1.jar核心包里com.opensymphony.xwork2里的com.opensymphony.xwork2.conversion里的TypeConverter.class里的com.opensymphony.xwork2.conversion.TypeConverter接口:实现TypeConverter接口的类里有DefaultTypeConverter类,我们可以看到继承自DefaultTypeConverter类的类里有一个抽象类StrutsTypeConverter,我们自定义的类就继承自StrutsTypeConverter,然后会重写两个方法:
1:把从前台传来的字符串数据封装成对象
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {}
2:把后台对象再转换成字符串数据回显到前台
@Override
public String convertToString(Map context, Object o) {}
那么我的自定义转换类:
package cn.jnit.convert;
import java.util.Arrays;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.opensymphony.xwork2.conversion.TypeConversionException;
import cn.jnit.bean.Point;
public class MyConvert extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
/* System.out.println("--------------------------Map---------------");
for (Object obj : context.keySet()) {
System.out.println(obj);
}
System.out.println("-------------------------------");
System.out.println(Arrays.toString(values));
System.out.println("-----------class--------------------");
System.out.println(toClass);
System.out.println("-------------------------------------------");*/
Point p=new Point();
System.out.println(values[0]);
String string =values[0].split(",")[0];
if(!(values[0].length()>0&&values[0].matches("\\d{2,5},\\d{2,5}"))){
//如果前台页面传进来的值与我自定义的类型转换方法里拆分的值不匹配则抛出异常
throw new TypeConversionException();
}
p.setX(Integer.valueOf(values[0].split(",")[0]));
p.setY(Integer.valueOf(values[0].split(",")[1]));
// TODO Auto-generated method stub
return p;
}
@Override
public String convertToString(Map context, Object o) {
Point p=(Point) o;
return p.getX()+","+p.getY();
}
}
由于用的是Struts自带的表单,会在提交的标签上自动加上错误信息,如果用的是HTML表单,那么需要加上<s:fielderror></s:fielderror>才会显示错误信息(建议用struts自带的表单)。
但是错误提示信息是strut2自带的英文提示信息,如果想要换成自己的错误提示信息,那么我们有两种选择:
第一种是:应用于全局范围的类型转换器,具体为:
首先我们需要在struts.xml里加上:
<constant name="struts.custom.i18n.resources" value="message"></constant>
的信息,因为默认情况下,所有类型转换的错误都是通用的i18n消息键
xwork-default.invalid.fieldvalue来报告错误信息的。然后,我们需要在src下创建一个message.properties文件,然后里面的简直对为:name:xwork.default.invalid.fieldvalue value:字段“{0}”的值无效(用Properties视图下,如果用Source视图下会显示为:xwork.default.invalid.fieldvalue=\u5B57\u6BB5\u201C{0}\u201D\u7684\u503C\u65E0\u6548
)
第二种是:应用特定类的类型转换器,具体为:
在Action包里,创建一个和Action同名的properties文件,里面的name=value为:
Invalid.fieldvalue.point=point 转换错误,
如果这个类是自定义类型,需要再加上一个:Action同名-conversion.properties的文件,里面的name值为point,value值为:自定义的类型转换器的全类名,如:point=cn.jnit.convert.MyConvert
最后切记所有的properties文件名一个字母都不能错,不然没有效果!
Struts2自定义类型转换,和处理类型转换错误的更多相关文章
- [JavaWeb基础] 013.Struts2 自定义类型转换器
很多时候,我们在做web开发的时候经常要用到时间的转换器,Struts2给我们提供了一种类型转换器的接口.下面我们讲讲怎么实现吧. 1.首先我们要定义一个类型转换的类,继承自com.babybus.s ...
- struts2自定义转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...
- java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换
java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换 一.字符串与其他类型连接 public class DemoString{ public static void mai ...
- [JavaWeb基础] 012.Struts2 自定义标签使用
在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改bug可以一次修改多次修复.那么在前端页面上,如果我们要经常用到公用的显示功能,并涉及到服务端逻辑操作 ...
- struts2 自定义校验规则
自定义校验规则:(了解) 在Struts2自定义校验规则: 1.实现一个Validator 接口. 2.一般开发中继承ValidatorSupport 或者 FieldValidatorSupport ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。
Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...
- apache 网页301重定向、自定义400/403/404/500错误页面
首先简单介绍一下,.htaccess文件是Apache服务器中的一个配置文件(Nginx服务器没有),它负责相关目录下的网页配置.通过对.htaccess文件进行设置,可以帮我们实现:网页301重定向 ...
- struts2上传图片超过大小给出错误提示
struts2上传图片超过大小给出错误提示 今天碰到上传图片太大,上传不上去返回input视图的界面,回显的错误信息却是乱码,整了好久才整出来,在这里做个记录,方便自己以后查阅,也希望能 ...
随机推荐
- 常见 bug
1.发言时,输入框中输入多个空格.
- PHP递归小例子
$news = M('productbase'); function digui($idd){ $child=M('navclass')->where('f_id='.$idd)->sel ...
- Java_Java Compiler 应用实例
转自:http://hejiangtao.iteye.com/blog/1399122 一直在用JDK1.5, 一直搞不清楚JDK1.6有啥特性, 就翻了翻, 发现这个Compiler API(JSR ...
- 运行java的class文件方法详解
一.运行class文件 执行带main方法的class文件,命令行为:java <CLASS文件名>注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java ...
- LVS + KEEPAlived 配置 DIR模式
1 .1 Lvs LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目 ...
- Net-SNMP是线程安全的吗
原文地址 : http://www.net-snmp.org/wiki/index.php/FAQ:General_19 Net-SNMP是线程安全的吗? 确切的说,不是.不过呢,在多线程管理的应用进 ...
- 去掉tppabs冗余代码,怎样批量去掉tppabs代码
去掉tppabs冗余代码,怎样批量去掉tppabs代码 刚用teleport pro拉了一个整站到本地 所有的超链都被强行加了一句tppabs=" 就玩了一把dw的替换功能 查找范围:整 ...
- Maven构建简单的多模块项目
复制于http://www.cnblogs.com/luxh/p/3506750.html 做个记录 一般web项目会进行分模块开发.这里简单分为domain(领域层).persist(持久层).se ...
- 第三章 Odoo基本设置
登录 正常访问http://localhost:8069后,登录的界面如下: 这是Odoo默认的认证方式,也是我们最常见最熟悉的认证方式,7.0以前,数据库中的密码都是以明文方式存储,可以很轻松地在r ...
- 如何设置div的宽度为100%-xx px?
如何设置div的宽度为100%-xx px? 参见如下帖子:http://stackoverflow.com/questions/15183069/div-width-100-10px-relativ ...