<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- Struts2的核心拦截器 --> <filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <url-pattern>*.action</url-pattern> <url-pattern>*.jsp</url-pattern> </filter-mapping> </web-app>
<?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="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default"> <action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert"> <result name="success">/typeConvert.jsp</result> </action> </package> </struts>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>Iindex page</title> </head> <body> <form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action"> userName:<input type="text" name="userName"> <br> passWord:<input type="password" name="passWord"> <br> <input type="submit" value="提交"> </form> </body> </html>
package cn.cvu.action; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class ActionTypeConvert extends ActionSupport { //与页面元素同名的属性,并且get/set。struts通过反射机制获取 private String userName; private String passWord; public String typeConvert() { //获取参数的方式一,使用ServletActionContext工具类 HttpServletRequest request = ServletActionContext.getRequest(); String username = request.getParameter("userName"); String password = request.getParameter("passWord"); System.out.println("typeConvert: "+username+","+password+"\n"); //获取参数的方式二,使用struts2自动获取 System.out.println("User's Message: "+userName+","+passWord); return "success"; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
<body> typeConvert~~~ </body>
<body> <form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action"> userName:<input type="text" name="userName"> <br> passWord:<input type="password" name="passWord"> <br> birthday:<input type="text" name="birthday"> <br> <input type="submit" value="提交"> </form> </body>
package cn.cvu.action; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class ActionTypeConvert extends ActionSupport { //与页面元素同名的属性,并且get/set。struts通过反射机制获取 private String userName; private String passWord; private Date birthday; public String typeConvert() { //获取参数的方式一,使用ServletActionContext工具类 HttpServletRequest request = ServletActionContext.getRequest(); String username = request.getParameter("userName"); String password = request.getParameter("passWord"); String birthDay = request.getParameter("birthday"); System.out.println("typeConvert: "+username+","+password+","+birthDay+"\n"); //获取参数的方式二,使用struts2自动获取 System.out.println("User's Message: "+userName+","+passWord+","+birthday); return "success"; } public String getUserName() { } public void setUserName(String userName) { } public String getPassWord() { } public void setPassWord(String passWord) { } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
package cn.cvu.action; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateTypeConvert extends DefaultTypeConverter { //覆盖此方法 //value:源类型,toType:目标类型 public Object convertValue(Object value, Class toType) { System.out.println("value:" + value + "toType:" + toType); //判断输入生日为空 if (value==null || "".equals(value)) { return false; } //判断目标输出类型为空 if (toType==null || "".equals(toType)) { return false; } //判断输出是否为目标类型 if (toType!=java.util.Date.class) { return false; } //确认传入数据位字符串 if (value instanceof java.lang.String[]) { String[] strs = (String[])value; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); try { if (strs != null && strs.length>0) { //按照指定格式返回日期 return sdf.parse(strs[0]); } } catch (ParseException e) { e.printStackTrace(); } } return new Date(); } }
和Action类统计目录。命名格式:需转换参数所在Action类-conversion.properties 。
birthday=cn.cvu.action.DateTypeConvert
<struts> <package name="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default"> <action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert"> <result name="success">/typeConvert.jsp</result> <!-- input是固定的。全部错误即转到后面的jsp页面 --> <result name="input">/errorConvert.jsp</result> </action> </package> </struts>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 类型转换错误!<br> <s:fielderror fieldName="birthday"></s:fielderror> </body> </html>
public class DateTypeConvert extends DefaultTypeConverter { //覆盖此方法 //value:源类型,toType:目标类型 public Object convertValue(Object value, Class toType) { System.out.println("value:" + value + "toType:" + toType); //判断输入生日为空 if (value==null || "".equals(value)) { return false; } //判断目标输出类型为空 if (toType==null || "".equals(toType)) { return false; } //判断输出是否为目标类型 if (toType!=java.util.Date.class) { return false; } //确认传入数据位字符串 if (value instanceof java.lang.String[]) { String[] strs = (String[])value; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); try { if (strs != null && strs.length>0) { //按照指定格式返回日期 return sdf.parse(strs[0]); } } catch (ParseException e) { //如果不抛出异常,struts会认为成功 throw new RuntimeException(e); } } return new Date(); } }
1》在和Action类同级目录创建自定义名称的properties文件。
xwork.default.invalid.fieldvalue=\u7C7B\u578B\u8F6C\u6362\u6709\u8BEF"{0}"
2》在struts.xml中加载自定义资源文件。
<struts> <!-- 如果有其它资源文件,用逗号隔开 --> <constant name="struts.custom.i18n.resources" value="cn.cvu.action.error_convert"></constant> <package name="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default"> <action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert"> <result name="success">/typeConvert.jsp</result> <result name="input">/errorConvert.jsp</result> </action> </package> </struts>
3》测试:
1》修改properties文件:针对某个属性进行配置。
invalid.fieldvalue.birthday=\u751F\u65E5\u8F6C\u6362\u9519\u8BEF
2》测试:
首先取消上文中的类型转换配置,重命名ActionTypeConvert-conversion.properties。
在src下创建指定名称的xwork-conversion.properties文件:
内容:目标类型=目标类型转换类
java.util.Date=cn.cvu.action.DateTypeConvert
<body> <form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action"> <!-- 这里使用了singer.前缀 --> userName:<input type="text" name="singer.userName"> <br> passWord:<input type="password" name="singer.passWord"> <br> birthday:<input type="text" name="birthday"> <br> <input type="submit" value="提交"> </form> </body>
package cn.cvu.bean; public class BeanSinger { private String userName; private String passWord; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } @Override public String toString() { return "BeanSinger [userName=" + userName + ", passWord=" + passWord + "]"; } }
package cn.cvu.action; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import cn.cvu.bean.BeanSinger; import com.opensymphony.xwork2.ActionSupport; public class ActionTypeConvert extends ActionSupport { //使用一个JavaBean对数据进行封装 private BeanSinger singer; private Date birthday; public String typeConvert() { //方式一,使用ServletActionContext HttpServletRequest request = ServletActionContext.getRequest(); String username = request.getParameter("singer.userName"); String password = request.getParameter("singer.passWord"); String birthDay = request.getParameter("birthday"); System.out.println("typeConvert: "+username+","+password+","+birthDay+"\n"); //方式二,使用struts2自动化 System.out.println("User's Message: "+singer.toString()+","+birthday); return "success"; } public BeanSinger getSinger() { return singer; } public void setSinger(BeanSinger singer) { this.singer = singer; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }