原理
原理和我的另外一篇相同的一样。(此次是局部类型转换,全局请看另外一篇)
继承StrutsTypeConverter….之后重写方法
主要文件有以下:Convert.java、UserAction-conversion.properties、UserAction.java、User.java、type.jsp
解释:
UserAction.java 是测试用的Aciton
UserAction-conversion.properties是配置要转换类型的参数
Convert.java 是类型转换的核心
不多说,直接代码:
Convert.java
package cn.type;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class Convert extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// TODO Auto-generated method stub
System.out.print("类型转换器开启...date:");
if(arg1==null||arg2==null){
return null;
}
if(Date.class!=arg2){
return null;
}
System.out.println(arg1[0]+"class:"+arg2.toString());
SimpleDateFormat sdf =null;
Date date=null;
/*
* 定义 Date类型数据能够转换的几种类型。
* yyyyMMdd必须要写全,如19860210
*
*/
/*
*
* 类型转换器开启...date:2016-07-02class:class java.util.Date
usernmae: xiaoming
password:
date: 2015-12-7 0:00:00
*/
String[] parse = new String[]{"yyyy-MM-dd","yyyy,MM,dd","yyyy/MM/dd","yyyyMMdd"};
for(String p :parse){
for(String str : arg1){
if(str!=null){
sdf= new SimpleDateFormat(p);
try {
date = sdf.parse(str);
return date;
} catch (Exception e) {
// TODO: handle exception
continue;
}
}
}
}
return null;
}
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
UserAction-conversion.properties
user.date=cn.type.Convert
UserAction.java
package cn.type;
import java.util.Map;
import cn.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;
public class UserAction extends ActionSupport {
private User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String login(){
//值栈! 此是传入root根元素中。
ValueStack vs = ActionContext.getContext().getValueStack();
vs.set("username", user.getUsername()+" root");
System.out.println("usernmae: "+user.getUsername());
System.out.println("password: "+user.getPassword());
System.out.println("date: "+user.getDate().toLocaleString());
return "login";
}
public String register(){
System.out.println("usernmae: "+user.getUsername());
System.out.println("password: "+user.getPassword());
System.out.println("date: "+user.getDate().toLocaleString());
return "debug";
}
}
User.java
package cn.entity;
import java.util.Date;
public class User {
private String username;
private String password;
private Date date;
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;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
type.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'model.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h3>类型转换</h3>
<p>类型转换的原理是:xml方式配合代码。代码继承StrutsTypeConverter</p>
<form action="type_v1_loginAction" method="post">
用户名:<input name="user.username" type="text"/><s:fielderror /><br/>
密码:<input name="user.password" type="password"><s:fielderror fieldName="password"/><br/>
日期:<input name="user.date" type="text"/><s:fielderror fieldName="date"/><br/>
<input type="submit" value="提交"/>
</form><br>
<br/>
El:{username:${username}}<br/>
ognl:{root:<s:property value="username"/>、map栈:<s:property value="#request.username"/>}<br/>
</body>
</html>
Struts.xml
<!-- 类型转换 -->
<action name="type_v1_*Action" class="cn.type.UserAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="input">/type.jsp</result>
<result name="login">/type.jsp</result>
<result name="debug">/inpue.jsp</result>
</action>