Struts2下关于Calendar,date的一些处理

本文介绍了一位新手在使用Struts2框架时遇到的问题,即在进行日期类型转换时出现的错误,并给出了具体的解决办法。文章详细展示了自定义类型转换器SampleTypeConversion的实现过程,包括如何将字符串转换为日期,再转换为Calendar对象。
在看struts2的文档的时候,动手尝试了下Type Conversion,但很不幸的是总是出现错误信息,如下:
[quote]ERROR [ParametersInterceptor] ParametersInterceptor - [setParameters]: Unexpected Exception caught setting 'dataInfo.birthday' on 'class com.chsi.sample.action.SampleEAction: Error setting expression 'dataInfo.birthday' with value '[Ljava.lang.String;@13ac14a'[/quote]
简单的代码如下:
[quote]public class SampleEAction extends BasicCRUTSupportAction implements Preparable{
private SampleObject dataInfo;
//其他代码
}[/quote],
Conversion的代码片段:
/*
* Created on 2008-10-10
*/
package com.chsi.sample.typeconversion;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.util.StrutsTypeConverter;

/**
* 一个简单的数据类型转换实例
*
*@author anwx<a href="mailto:XXXXXX@c.com">An Weixiao</a>
*@version $Id$
*/
public class SampleTypeConversion extends StrutsTypeConverter{
private Log log = LogFactory.getLog(SampleTypeConversion.class);
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
log.info("执行convertFromString: ......");
if(values == null || values[0] == null)
return null;
[color=red]Calendar cal = Calendar.getInstance();[/color] //error: cal = null
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = dateFormat.parse(values[0]);
cal.setTime(date);
} catch (ParseException e) {
log.info("TypeConversion 出错啦!!!");
e.printStackTrace();
return cal;
}
return cal;
}

@Override
public String convertToString(Map context, Object object) {
log.info("执行convertToString: ......");
if(object instanceof Calendar){
StringBuffer buffer= new StringBuffer();
Calendar o = (Calendar)object;
buffer.append(o.get(Calendar.YEAR));
buffer.append("-").append(o.get(Calendar.MONTH) + 1);
buffer.append("-").append(o.get(Calendar.DATE));
return buffer.toString();
} else {
log.info("非Calendar类型");
return null;
}
}

/* (non-Javadoc)
* @see org.apache.struts2.util.StrutsTypeConverter#convertValue(java.util.Map, java.lang.Object, java.lang.Class)
*/
@Override
public Object convertValue(Map arg0, Object arg1, Class arg2) {
return super.convertValue(arg0, arg1, arg2);
}

/* (non-Javadoc)
* @see org.apache.struts2.util.StrutsTypeConverter#performFallbackConversion(java.util.Map, java.lang.Object, java.lang.Class)
*/
@Override
protected Object performFallbackConversion(Map arg0, Object arg1, Class arg2) {
return super.performFallbackConversion(arg0, arg1, arg2);
}
}


然后SampleEAction-conversion.properties的文件内容为:
dataInfo.birthday=com.chsi.sample.typeconversion.SampleTypeConversion

这里请注意conversion中红色部分是正确的处理,而错误信息的引起主要是因为cal 为null,因为是个新手哈,还一根筋的认为是conversion的配置出错了呢……,简直是无语……

当然在处理conversion的时候也对date, calendar进行了相关的处理考虑:从struts2提供的文档来看,如果要在页面中显示一个日期格式,可以使用:
[size=medium]关于java.util.Date:[/size]
1、<s:text>
[quote] <s:text name="format.date"><s:param name="value" value="dataInfo.specialDate"></s:param></s:text>
[/quote]
2、<s:date>这个更为方便
<s:date format=""/>
3、当然我们也可以通过request得到对应的数据然后直接自己动手转化

如果表单中有需要格式话的date类型,则可以使用:
<s:textfield key="dataInfo.specialDate" value="%{getText('format.date',{dataInfo.specialDate})}" />
其中的formate.date来自属性文件, [color=red]这里需要注意的是我们在写属性的时候'='两边不要有空格,否则<input value="">中将会出现空格哈[/color]
这里还要注意的一点就是getText的第二个参数不要用引号!!!,这个是struts2文档中的一个错误……,也无语,险些害我为此而整个conversion来处理java.util.date类型,

关于java.util.Calendar:
这个属性需要使用conversion来完成转化,只要实现了conversion其他的问题就是date和calendar之间的转化了……,在页面中我们可以通过它的属性time来得到date数据,然后的处理方法就和date一样了.
value="dataInfo.mc.time" 就得到了Calendar类型的date值
提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值