2011-04-09 61 views
1

我是Spring Framework newbe,我设法做出了一个非常简单的CMS,使用Hibernate数据持久性(我使用mySQL数据库)在FrontPage上显示文章。我的数据模型使用了一些Drupalesque术语(如“节点”),因为我习惯于该CMS。 ;)如何在Spring框架中调用JSP文件中的转换器?

现在我努力完成将存储在数据库中的UNIX时间戳转换为ISO日期格式的任务。我决定写我自己的转换器来完成这项任务。

我做了我的家庭作业,并阅读了Spring参考指南,搜索教程等,但似乎转换器主要是用于转换来自GET参数和POST查询的数据的工具。那么把控制器绑定到Model中的对象的字段转换成什么呢?我在研究过程中错过了什么?

的JSP代码(frontpage.jsp)部分:

<div id="content-wrapper"> 
     <div id="center-column"> 
      <c:forEach items="${NodeCollection}" var="node"> 
       <div class="node"> 
        <h3>${node.title}</h3> 
        <span class="pub_time">${node.timestamp}</span> 
        <div class="content">${node.teaser}</div> 
       </div> 
      </c:forEach> 
     </div> 

我的控制器:

@Controller 
public class FrontpageController { 

    private NodeRevisionsDAOImpl nodeRevisionsDAO; 

    @Autowired 
    void setnodeRevisionsDAO(NodeRevisionsDAOImpl myNodeRevisionsDAOImpl) { 
     this.nodeRevisionsDAO = myNodeRevisionsDAOImpl; 
    } 

    @RequestMapping (value = "/index.htm", method = RequestMethod.GET) 
    ModelAndView getMainPage(ModelAndView mav) { 
     ModelMap modelMap = new ModelMap(); 
     Collection nodes = nodeRevisionsDAO.listNodeRevisions(5); 
     modelMap.addAttribute("NodeCollection", nodes); 
     mav.setViewName("frontpage"); 
     mav.addAllObjects(modelMap); 
     return mav; 
    } 

} 

我的虚拟转换器(我会添加实施后):

package converters; 

import org.springframework.core.convert.converter.Converter; 

public class TimestampToDateConverter implements Converter<Long, String> { 

    public String convert(Long s) { 
     return "0000-00-00 00:00:00"; //Dummy code 
    } 

} 

Dispacher的配置:

<mvc:annotation-driven conversion-service="conversionService" /> 

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> 
    <property name="converters"> 
     <list> 
      <bean class="converters.TimestampToDateConverter"/> 
     </list> 
    </property> 
</bean> 

回答

1

为什么你不使用日期数据类型。 使用JSTL,你可以轻松实现你的情况下,无需额外的转换器,例如

<fmt:formatDate pattern="yyyy-MM-dd hh:mm:ss" value="${node.time}" /> 
+0

感谢的答案,但它仍然不顺利。我在我的Hibernate bean中为“时间戳”(长数据类型)字段设置了这种类型的转换: public Date getTimestamp(){ Date date = new Date(); date.setTime(timestamp.longValue()); 返回日期; } 在呈现的html中,我得到像1970-01-16 02:41:33这样的日期,它看起来不会传输适当的值...但是,Hibernate bean中的时间戳是正确的。 – DoktorNo 2011-04-09 14:31:31

+0

表中该列的类型是什么? – 2011-04-09 14:42:35

+0

我使用BIGINT(20)来存储时间戳。我在getter中为时间戳做了一个简单的System.out输出,并且它是正确的。日期值也是正确的。 – DoktorNo 2011-04-09 15:41:18

相关问题