Struts转换器和错误提示

转换器相应定义规则

自定义转换器(三种配置方式)

1.全局级别

在classpath下定义xwork-conversion.properties
包名.类名.属性名=自定义转换器类名
java.util.Date=com.mingde.converter.DateTypeConverter

2.Action类级别

在action所在包下定义:action类名-conversion.properties
action属性名(若为对象,则指定该对象属性)= 自定义转换器类名

3.JavaBean级别

在vo所在的包下定义:实体类名-conversion.properties
内容:属性名=自定义转换器类名

转换器出错,解决默认的错误信息

方法一:

在src下定义全局资源文件application.properties
内容为:xwork.default.invalid.fieldavlue="{0}"的值无效
然后在struts.xml文件中配置
<constant name="struts.custom.i18n.resources" value="application"/>
最后在JSP页面中用:
<s:head/><s:fielderror/>	//显示错误

方法二

在action所在包下定义文件
如:StudentAction.properties文件
内容:invalid.fieldvalue.student.birthday=无效字段值

方法三

在vo所在包下定义Student.properties文件
内容:invalid.fieldvalue.birthday(属性)=无效字段值

定义转换器

package com.minde.converter;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.opensymphony.xwork2.conversion.TypeConversionException;

public class DateTypeConverter extends StrutsTypeConverter{
	//从前台输入的字符串values转换为后台的java对象
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
		//将前台输入的字符串转换为日期
		try {
			Date dt = df.parse(values[0]);
			return dt;
		} catch (ParseException e) {
			//System.out.println("对不起,日期格式转换失败!");
			//当转换异常时,要抛出异常,通知struts2发生了转换异常要进行处理
			throw new TypeConversionException(e.getMessage()+"[" + values + 
					",classes:" + toClass+"]");
		}
	}
	//从后台将日期数据转换到前台页面展示
	@Override
	public String convertToString(Map context, Object o) {
		Date dt = (Date)o;
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd  E");
		return df.format(dt);
	}
}

Action类

package com.minde.action;

import java.util.Date;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class StudentAction extends ActionSupport{

	private Date sdate;
	
	public Date getSdate() {
		return sdate;
	}
	public void setSdate(Date sdate) {
		this.sdate = sdate;
	}
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}

全局转换器定义

规则在classpath(src)下定义名为:xwork-conversion.properties文件(文件名固定)
内容:java.utils.Date=定义转换器的路径
当你使用页面跳转到Action时,因为xwork-conversion.properties文件定义为全局,所以会自动启用他,进行转换器的转换
原理:先将页面上传的java对象进入转换器,由转换器进行convertFromString()方法后再返回给Action类,所以返回的类型要与Action上定义的类型一致,当Action类处理完后,再此进入转换器convertToString()方法进行转换,返回值是String型,再返回到结果页面显示

局部转换器

Action包类定义
如Action类名:StudentAction
那么进入转换器的文件名为:StudentAction-conversion.properties
文件内容:Action类里面定义的属性=转换器路径

VO包里定义

如果实体类名为Student
那么进入转换器的文件名为:Student-conversion.properties
内容:属性名=自定义转换器类名(路径)

转换出现错误的提示信息

第一种方式:全局错误信息资源提示文件定义

1.错误信息资源文件的定义
在src下定义application.properties
2.错误信息资源文件的内容
xwork.default.invalid.fieldvalue=要提示的错误信息{0}
3.在struts.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>
	<constant name="struts.devMode" value="true"></constant>
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<!-- 定义全局错误信息文件 -->
	<constant name="struts.custom.i18n.resources" value="application"></constant>
	<package name="" extends="struts-default">
		<action name="holle" class="com.mingde.action.HelloAction">
			<result>success.jsp</result>
			<result name="input">Hello.jsp</result> <!-- 出现错误跳转的页面 -->
		</action>
	</package>
</struts>

5.Action类要继承ActionSupport
6.JSP页面
<body>
	<!-- 定义当出错返回该页面是出现错误提示 -->
	<s:head/>
	<s:fielderror/>
	<form action="holle" method="post">
		请输入时间<input name="date">
		<input type="submit" value="提交">
	</form>
</body>


第二种方式:(Action)局部资源提示定义

1资源文件的定义

如果要对某个Action类中定义错误信息的话,如:StudentAction,那么定义的错误提示文件名应为StudentAction.properties

2.资源文件StudentAction.properties的内容:

invalid.fieldvalue.sdate=要提示的错误信息{0}
invalid.fieldvalue.Action类中每个会出错的属性名=要提示的错误信息{0}

3.在struts.xml定义出错要跳转的input界面,局部错误提示资源不用在struts.xml配置路径,可以直接使用

4.Action类要继承ActionSupport

5.JSP页面使用标签展示错误:

<!-- 定义当出错返回该页面是出现错误提示 -->
	<s:head/>
	<s:fielderror/>

第三种方式:VO包里定义错误资源提示文件

如:实体类为Student
在vo所在包下定义Student.properties文件
内容:invalid.fieldvalue.属性=无效字段值












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值