转换器相应定义规则
自定义转换器(三种配置方式)
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.属性=无效字段值