论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
怎样真正的在Struts框架下使用时间类型
 作者:佚名     2007-3-14 16:50:10        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

使用时间类型,这谁不会,不就是java.util下的几个类吗,再加上java.sql和java.text下的几个类,这会有什么问题吗?Struts要是连时间都处理不了,那还能干嘛?

在实际应用中,我就发现Struts确实连有些简单的时间都处理不了(不知是我使用的方法不对还是Struts确实没有考虑到)。顺便你也能了解Struts是怎么把form里的请求参数populate到ActionForm里面的。

今天下午同事告诉我把有java.util.Date类型属性的类存入数据库时出错,把这个属性删除就没有问题了。当时我就想到是RequestProcessor在processPopulate()时出错了,因此在它的这个方法设了断点并跟踪了进去。

当然,它最先要调用ActionForm的reset()方法,然后调用实际处理populate(将请求参数传给ActionForm)的RequestUtils.populate()方法。RequestUtils的这个静态方法最先是处理Multipart的(即文件上传等多部分)的方法,然后将所有的请求都放在叫properties的HashMap里并循环处理它:

names = request.getParameterNames();
while (names.hasMoreElements())
{
String name = (String) names.nextElement();
String stripped = name;
if (prefix != null)
{
if (!stripped.startsWith(prefix))
{
continue; 
}
stripped = stripped.substring
(prefix.length());
}
if (suffix != null)
{
if (!stripped.endsWith(suffix))
{
continue;
}
stripped = stripped.substring
(0, stripped.length() 
- suffix.length());
}
if (isMultipart)
{
properties.put(stripped, 
multipartParameters.get(name));
}
else 
{
properties.put
(stripped, request.getParameterValues(name));
} 
}

实际处理它们的是下面的:BeanUtils.populate(bean, properties);其中bean就是接受数据的ActionForm,而properties里面则是所有的请求的键-值对(键和值都是字符串,http协议的特点)。

再看看BeanUtils的静态(类)方法populate是怎么处理的:

// Loop through the property 
name/value pairs to be set
Iterator names =
properties.keySet().iterator(); 
while (names.hasNext())
{
// Identify the property name
and value(s) to be assigned
String name = (String) names.next(); 
if (name == null)
{ 
continue;
}
Object value = properties.get(name);
// Perform the assignment for this property
setProperty(bean, name, value);
}

它是循环所有的请求参数,把实际的工作又交给了setProperty方法。这个类就是:一上来20多行都在一个if (log.isTraceEnabled()){}里面。建议在写Action 的execute()或被execute()调用的业务方法中使用Commons Logging 来代替System.out.println()——当要你把成百上千的System.out.println()去掉的时候你就会觉得Commons Logging有多好用了。它的用法是:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 
private/protected static Log log = 
LogFactory.getLog(DispatchAction.class);

如果你用的是DispatchAction,那你就不要自己定义Log的实例了,因为它已经有一个protected的Log实例,直接使用即可。使用方法是:

if (log.isInfoEnabled())
{
log.Info("some information.");
}

Logging把消息分为6种级别,debug,error,fatal,info,trace,warn。比如,你想记录一条消息,它只是为了给用户一个警告,则可以使用warn。为什么在每个log.Info()前做一次判断呢?难道如果log级别不允许Info,log.Info()仍然能Info吗?当然不是。它的作用是提高效率。

比如有个消息是计算前一万个自然数的和(这种消息可能少见)。用直接log.Info()

int sum=0;
for(int i=0;i<10000;i++)
{
sum+=i; 
}
log.Info("the sum of form 1 to 10000 is : "_sum);

如果log.Info是不允许的,那求10000个数的和就白求的。当然如果你的计算机很快或和高斯一样聪明,直接log.Info()也每什么问题。


1 2 下一页>>

责任编辑:lss
  相关新闻
怎样学习C语言
CCIE是怎样炼成的—我到北京考试的经历
怎样才能阻止用户打开加密信息?
怎样配置具有SSL保护的FTP服务器
怎样在Java应用程序中监视CPU的使用状况
怎样在Linux下Tomcat与Apache服务器集成
教您怎样在Web应用中动态创建PDF文件
怎样成为优秀的软件模型设计者?
详解怎样使用Axis开发Web Service的实例
怎样成为优秀的软件模型设计者?
怎样学习C语言
CCIE是怎样炼成的—我到北京考试的经历
真正的软件工程师(中国与印度)
教您怎样部署基于WebSphere的J2EE应用
教您怎样在Web应用中动态创建PDF文件
详解怎样使用Axis开发Web Service的实例
详解怎样使用Axis开发Web Service的实例
真正J2EE软件工程师应具备的能力
怎样成为优秀的软件模型设计者?
怎样构建更好的企业应用程序异常处理框架
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号