[T5]怎样格式化日期字段然后个性化输出

koda 2007-08-27
采用t5+hiberate架构,假设一个hibernate实体类User,有modifyDate属性(日期类型)
现在需要一个显示页面UserList先是个性化的日期。 通常在Page类中,我们有一个List 容纳从数据库中取出来的User对象列表,然后在页面像这样显示
<t:loop source="users" value="_user">
  ${_user.username} | ${_user.lastName} | ${_user.modifyDate} <br/>
</t:loop>

但是对于modifyDate字段,我想做一个个性化的转换(如:2007-08-26 18:18:06 --> 2007|08|26[18:18:06]),然后再显示出来,有什么简便的方法吗?
tapestry 2007-08-27
类里边写个get方法格式化一下在输出,简便的方法没想到
koda 2007-08-27
tapestry 写道
类里边写个get方法格式化一下在输出,简便的方法没想到


你是说:我不得不修改hibernate实体类, 增加一个getCustomizedModifyDate()方法?像这样
public String getCustomizedModifyDate(){
  return Util.format(this.getModifyDate());
}


如果这样做,那不是污染了HIBERNATE实体类?
如果我写一个VO类extends User(或者使User作为VO的一个属性),然后把getCustomizedModifyDate()作为vo类的一个属性.这个VO类可能像这样
pulic class UserVO{
  private User user;
  private String customizedModifyDate;
  ....
  public String getCustomizedModifyDate(){
     return Util.format(this.user.getModifyDate());
  }
}

那么带来的新的问题是:每次从数据库中取得User列表都不得重新遍历,构造一个相应的VO类列表,用于页面显示。

T5不能像t3/t4那样使用类的静态方法(在t3/t4中我可以在页面中调用Util.format(this.user.getModifyDate())来得格式化好的串,就省却了VO类),你觉得T5有什么统一的更好的替代方案吗?
jimlaren 2007-08-27
在Page类里做这个呀呀

private User user; //迭代用的user
public String getCustomizedModifyDate(){
return Util.format(this.user.getModifyDate());
}
koda 2007-08-27
jimlaren 写道
在Page类里做这个呀呀

private User user; //迭代用的user
public String getCustomizedModifyDate(){
return Util.format(this.user.getModifyDate());
}


不是的,在Page类中,这个属性绝对不会看起来像上面的样子。完整应该是这样:
public class MyUserListPage{
  private List userList;  // UserVo List
  private UserVo userVo;  // for each item in loop.
  .....
}


在MyUserListPage.html中
<t:loop source="userList" value="userVo">  
${userVo.user.username} | ${userVo.user.lastName} | ${userVo.customizedModifyDate} <br/>  
</t:loop>  

所以还是面临我前面提出的问题
superaxis 2007-08-27
同意2楼tapestry的做法,我们现在很多地方都是这么做的。采用Annotation,加上@Transicent,关于PO和VO我不想说太多(怕迎来口水战,^_^),但是个人的观点是,可以把你类似这样的处理放在你的PO中.

Jun Tsai
koda 2007-08-27
superaxis 写道
同意2楼tapestry的做法,我们现在很多地方都是这么做的。采用Annotation,加上@Transicent,关于PO和VO我不想说太多(怕迎来口水战,^_^),但是个人的观点是,可以把你类似这样的处理放在你的PO中.

Jun Tsai


哎,于我真是一个艰难的选择,因为我的PO仍然采用原来的hbm.xml导出,专门有一个代码生成器生成项目所有能自动化的代码,包括Entity, BaseDao, BaseService, BasePage(基于T5的CRUP),然后直接package成jar, 所以我们的hibernate实体类无法用注释,难道为了这个小问题,我们就必须改变我们现有的开发模式吗?
koda 2007-08-27
顺便,T5不能像t3/t4那样使用类的静态方法(在t3/t4中我可以在页面中调用Util.format(this.user.getModifyDate())来得格式化好的),那么T5意欲如何解决此类问题呢?
大家觉得我们不需要在页面中直接调用静态方法或者带参数的方法吗???
superaxis 2007-08-28
koda 写道
顺便,T5不能像t3/t4那样使用类的静态方法(在t3/t4中我可以在页面中调用Util.format(this.user.getModifyDate())来得格式化好的),那么T5意欲如何解决此类问题呢?
大家觉得我们不需要在页面中直接调用静态方法或者带参数的方法吗???


其实这种方式的调用,性能上来说,是有损失的,我一般不建议我的同事这么做。

Jun Tsai
koda 2007-08-31
后来还是发现一点小小的技巧:使用Output组件
<span t:type="Output" value="modifyDate" format="dateFormat"/><br/>

在Page类中有如下的属性
	public java.text.Format getDateFormat(){
		Format format = new SimpleDateFormat("MM/dd/yyyy");
		return format;
	}

	public Date getModifyDate() {
		return modifyDate;
	}


由此,对于类似的需求,我们只需实现相应java.text.Format类就可以了

相关讨论