日期:2014-05-20  浏览次数:20868 次

关于struts2中类型转换问题
xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

  <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  <constant name="struts.devMode" value="true" ></constant>
  <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<constant name="struts.ui.theme" value="simple"/>
  <package name="default" namespace="/a" extends="struts-default">

  <action name="test" class="yyAction" >
  <result>
/test.jsp
  </result>
  <result name="input">/Hello.jsp</result>
  </action>
  </package>

  <!-- Add packages here -->
   

</struts>

对应的action:

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;


public class yyAction extends ActionSupport{

private static final long serialVersionUID = 1L;

Date date;




public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}




public String execute() throws Exception {
return SUCCESS;
}

}
对应的JSP文件:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

date:<s:property value="d"/><br/>


</body>
</html>


当我在连接中输入:http://localhost:8888/Struts_2/a/test?date=1900-02-01为什么会跳转到/Hello.jsp而不是执行test。jsp呢?谢谢




------解决方案--------------------
Action的方法的参数类型不对啊,你定义的是Date,jsp中给的是String,这样就有问题了啊
------解决方案--------------------
<s:date name= format="dd/MM/yyyy" value="1900-02-01"/>
------解决方案--------------------
很早就起床了,我发表下我的想法,如有不对,还望谅解.

首先你传入的类型是String类弄, 到ACTION中会执行setDate()方法,由于类型转换错误,故被Struts2的Interceptor拦截器进行拦截.(里面的exception).如果执行了exception拦截器,则该拦截器默认会返回input. 即你Hello.jsp页面.希望楼主能看下此拦截器的原理即可.
------解决方案--------------------
楼主可以利用 dateformat进行字符类到时间类型的转换 
例如dateformat df=new dateformat(yyMMdd);
String date=df.("传进来的字符串");
最后利用
Java code
Date date;

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

------解决方案--------------------
纯属手动写 可能具体代码要调试下
------解决方案--------------------
探讨

楼主可以利用 dateformat进行字符类到时间类型的转换
例如dateformat df=new dateformat(yyMMdd);