`
lovnet
  • 浏览: 6704938 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

ognl.MethodFailedException: Method "setDate" failed for object解决

 
阅读更多
环境:MyEclipse6.5+ Tomcat6.0.18+Struts2.1+Hibernate3.2+Spring2.5.6+MySQL Server 5.1

问题:通过时间查询记录列表时报如下错误:
ognl.MethodFailedException: Method "setDate" failed for object com.axt.po.TbRecord@1d4a34c [java.lang.NoSuchMethodException:
com.axt.po.TbRecord.setDate([Ljava.lang.String;)]

1.首先看看页面上是怎么把数据传过来的
queryAllRecord.jsp

<!-- 记录时间 -->
	<!-- 触发的时间是一个JS控件,用于获得时间-->
	<td id="s3" style="display:none">	
		<s:textfield id="date" name="recordDate"
			onclick="MyCalendar.SetDate(this)" cssStyle="width:150px"
			readonly="true">
		</s:textfield>
	</td>



2.PO里生成的映射文件(数据库采用的是MySQL,存储的数据类型是datetime)
TbRecord.java

private Timestamp date;



3.这是Action里接收时间的数据类型
QueryAction.java

private String recordDate;//获取查询时间
	
	//如果使用以下两种数据类型,就会报“ognl.MethodFailedException: Method "setDate" failed for objec”异常
	//private Date recordDate;
	//private Timestamp date;
	
	public String getRecordDate() {
		return recordDate;
	}


	public void setRecordDate(String recordDate) {
		this.recordDate = recordDate;
	}
	
	System.out.println("recordDate:" + recordDate);
	//2012-08-06				
	Date date = new Date();
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	date = sdf.parse(recordDate);
	
	System.out.println(date);
	//Mon Aug 06 09:41:20 CST 2012



4.这是Dao里面的方法,用于查询

TbRecordDao.java


/**
	 * 通过记录时间查询记录
	 * HQL查询 HQL查询对数据类型进行了优化,能得到正确的数据
	 * @param recordDate
	 * @return
	 */
	public List<TbRecord> queryRecordByDate(Date recordDate){
		Query query = this.sessionFactory.openSession().createQuery("from TbRecord where date like '%"+FormatUtils.formatDateDay(recordDate)+"%'");
		return query.list();
	}
	
	/**
	 * 通过记录时间查询记录
	 * 原生SQL查询 经试验证明,这种方法不可行,查询不出任何数据
	 * @param recordDate
	 * @return
	 */
	public List<TbRecord> queryRecordByDate(Date recordDate){	
		Query query = this.sessionFactory.openSession().createSQLQuery("select * from tb_record where date_format(date,'%Y-%m-%d') like '%"+cu.dateToString(recordDate)+"%'");
		return query.list();
	}



5.以下为解决办法,自写Java类将得到的数据转换成想要的格式
FormatUtils.java

import java.text.DecimalFormat;
	import java.text.SimpleDateFormat;
	import java.util.Date;
	public class FormatUtils {
	private static SimpleDateFormat second = new SimpleDateFormat(
			"yy-MM-dd hh:mm:ss");


	private static SimpleDateFormat day = new SimpleDateFormat("yyyy-MM-dd");
	
	private static SimpleDateFormat fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
	
	/**
	 * 将日期格式化作为文件名
	 * @param date
	 * @return
	 */
	public static String formatDateForFileName(Date date) {
		return fileName.format(date);
	}


	/**
	 * 格式化日期(精确到秒)
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateSecond(Date date) {
		return second.format(date);
	}


	/**
	 * 格式化日期(精确到天)
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateDay(Date date) {
		return day.format(date);
	}


	/**
	 * 将double类型的数字保留两位小数(四舍五入)
	 * 
	 * @param number
	 * @return
	 */
	public static String formatNumber(double number) {
		DecimalFormat df = new DecimalFormat();
		df.applyPattern("#0.00");
		return df.format(number);
	}


	/**
	 * 将字符串转换成日期
	 * 
	 * @param date
	 * @return
	 * @throws Exception
	 */
	public static Date formateDate(String date) throws Exception {
		return day.parse(date);
	}
	
	public static String formatDoubleNumber(double number) {
		DecimalFormat df = new DecimalFormat("#");
		return df.format(number);
	}
	
}




总结:

1.页面上传过来的数据是String类型,Hibernate不能把String类型转化成TimeStamp、Date,所以在Action里不能定义成TimeStamp、Date,而定义成String,再把得到的String自写Java类转换成需要的格式。建议采用HQL查询,除非是非常复杂的SQL,这种情况建议使用原生SQL查询。

2.以前有个项目,数据库采用的是SQLServer,存储时间的类型同样是datetime,Dao里面写得没有现在那么复杂,而且Action里

是用Date进行接收的,没有报任何错误。可见不同的数据库差异性还是很大的。在平时学习和做项目要注意和总结这些差异。


参考资料:


struts2标签怎么格式化时间输出


http://www.cnblogs.com/yaohwang/archive/2012/07/05/2578567.html



http://topic.csdn.net/u/20080407/19/58c9e096-e553-42ee-af2a-a0456fe93647.html



SSH中hibernate的日期查询格式问题,很简单,但我解决不了





分享到:
评论

相关推荐

    ognl.MethodFailedException

    NULL 博文链接:https://sxz20041919.iteye.com/blog/861075

    struts2文件上传

    ognl.MethodFailedException: Method "setUpload" failed for object 文件类型的限制会在struts.xml中进行配置 几种常见的类型,图片格式image/jpeg,image/gif word文档格式doc :application/msword word文档格式...

    ognl.jar资源包

    camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...

    使用的ognl的chm

    使用的ognl,正对是struts2 hibernate 等

    ognl.jar ognl.jar

    ognl.jar ognl.jar

    ognl-3.2.21-API文档-中文版.zip

    赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...

    ognl-3.1.12-API文档-中文版.zip

    赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...

    ognl.zip 版本3.0.6

    java.lang.NoClassDefFoundError: ognl/PropertyAccessor,缺少jar包,支持正则表达式

    ognl-3.0.21.jar ognl.jar

    ognl-3.0.21.jar

    第四章:struts2中的OGNL.ppt

    第四章:struts2中的OGNL.ppt,详细讲解了struts2的标签使用

    struts2资源包

    ognl-2.7.3.jar :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性。 struts2-core-2.1.8.jar:Struts 2框架的核心类库 xwork-core-2.1.6.jar:XWork类库,Struts 2在其上...

    OGNL.rar_ognl api_ognl._ognl源码_ognl源码分析_ongl download

    ONGL官方源码

    ognl.jar(ognl-2.6.11.jar)

    解开后才可用,再与去ECLIPSE中ATTACH SOURCE关联

    ognl.jar包,struts2开发必备

    ognl.jar包,struts2开发必备。用以支持OGNL表达式的。

    Struts2核心包

    ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,...

    02MyBatis概述、核心组件、OGNL.md

    02MyBatis概述、核心组件、OGNL.md

    struts2-demo

    ognl-2.6.x.jar: 对象图导航语言(Object Graph Navigation Language),Struts2框架通过其读写对象的属性 d. freemarker-2.3.x.jar: Struts的UI标签的模板使用FreeMarker编写 e. javassist-3.x.ga.jar f. commons...

    ognl.zip_ognl

    OGNL表达式的运用,能够正确运行出OGNL表达式效果,从而熟悉它的使用方法

    Struts2-OGNL.rar_ognl

    Struts2的OGNL表达式语言Object-Graph Navigation Language

Global site tag (gtag.js) - Google Analytics