今天我为大家做了一个 spring3 MVC 的例子,希望能对刚接触spring的朋友有所帮助。该流程属于大型项目的流程,涉及的知识比较希望大家耐心学习。
项目开发流程详解:http://zz563143188.iteye.com/blog/1825168
1.本工程内容较多,可能需要设计编译目录: http://zz563143188.iteye.com/blog/1826517
2.调试网页建议页面调试工具firebug http://zz563143188.iteye.com/blog/1825978
3.可以使用Spring mvc 单元测试 http://zz563143188.iteye.com/blog/1827454
4.Spring mvc整合hibernate http://zz563143188.iteye.com/blog/1831561
5.日志log4j配置springMvc例子 http://zz563143188.iteye.com/blog/1825387
6.由于webroot下面的内容很多,设置不编译和验证 http://zz563143188.iteye.com/blog/1826517
7. 根据jar生成源码工具 http://zz563143188.iteye.com/blog/1826988
8.java常用环境变量设置 http://zz563143188.iteye.com/blog/1827884
9.比较全的OA系统功能模块列表 http://zz563143188.iteye.com/blog/1860248
10.需求文档管理工具 http://zz563143188.iteye.com/blog/1830393
11.PowerDesinger逆向数据库物理模型及关系图 http://zz563143188.iteye.com/blog/1829068
12.发散性思维工具(思维导图)推荐 http://zz563143188.iteye.com/blog/1831562
13.推荐一款好用的笔记管理软件(Evernote) http://zz563143188.iteye.com/blog/1830965
14.数据库生成数据字典工具(PDMREAD)图解 http://zz563143188.iteye.com/blog/1828557
15.代码生动生成工具(POJO,DAO,Service,action)等层代码http://zz563143188.iteye.com/blog/1819765
16.spring3,struts2,hibernate,junit,设计模式视频教程下载 http://zz563143188.iteye.com/blog/1839517
17.UML 的九种模型图 http://zz563143188.iteye.com/blog/1841234
http://zz563143188.iteye.com/blog/1841225
18.Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间
http://zz563143188.iteye.com/blog/1841239
19.Java面试宝典2013版 http://zz563143188.iteye.com/blog/1843725
20.Java技术体系图(从程序员到CTO各阶段技 http://zz563143188.iteye.com/blog/1877266
21.百万级访问网站前期的技术准备 http://zz563143188.iteye.com/blog/1842135
22.关于一个大型web系统架构设计和技术选型的讨论 http://zz563143188.iteye.com/blog/1842128
23.高性能网站性能优化与系统架构 http://zz563143188.iteye.com/blog/1842129
24.java23种模式详解 (带源码有图) http://zz563143188.iteye.com/blog/1847029
25.软件开发文档范例 http://zz563143188.iteye.com/blog/1835305
26.软件开发模式对比(瀑布、迭代、螺旋、敏捷) http://zz563143188.iteye.com/blog/1843691
27.我心目中最好的框架组合 http://zz563143188.iteye.com/blog/1867767
28. 全国(大学)高等教育各学科视频教学全集 http://zz563143188.iteye.com/blog/1823042
更多高级应用(项目构架、工程、文档、研发管理) http://zz563143188.iteye.com/
本人只是将 www.jeecms.com进行改变。目的是为了让大家更加了解jeecms,这样可以让大家学习。
长虽然我工作很忙没有闲暇时间,但我还是愿意抽时间分享优秀的项目给大家学习。
架构分层图解:
1.后台工程 包命名规则以com.jeecms.cms.(分为以下图层),项目架构entity,dao,mng,action,html等结构如下图所示。
2.上图结构图在项目分布图如下。
3.数据库映射文件,下面有对象处在的包层及对象对应的数据库表。
4.java bean配置在entity包下面,Base包下面都是直接与数据表关联的对象。在这里创建字段属性及对象对应的xml映射的表字段属性的get,set方法。
5.我采用的spring mvc实现action,dao,manager依赖注入方法,所以需要将实现类在spring的配置文件中加载,统一首字母小写方式命名。
6.Dao在spring文件中
7.业务层的具体实现通过spring的注解实现,事务也交给spring(有网友建议readonly开关设置)
8.action控制层是业务层与视图层的桥梁,这里需要申明业务层接口,当然spring已经按类型注解。
9.资源文件是支持国际化的重要文件,这个也需要在springmvc中指定。
10.html的命名统一,上一次目录都是按照表名来定义。
开发流程详细介绍:
1.web.xml文件是工程运行的起点,需要在这里配置好所有的配置信息。引导页、spring、log4j,struts、hibernate、过滤器,监听、等等都是在这里配置好。
2.jeecms工程的访问目录及访问路径在web.xml中的配置
3.资源文件配置,资源文件的key命名规则用(对象.功能.信息)
4.数据库连接文件jdbc.propertiy的配置同spring放置在同一个目录下面。
如果是单元就在classpath:config下面,如果是web.xml加载则在web-inf/config下面
5.spring加载数据库jdbc文件,通过通配符来读出.properity文件的修正。 如果是单元就在classpath:config下面,如果是web.xml加载则在web-inf/config下面
6.jeecms自定义标签在spring中初始化,这些标签通过java实现。
7.springmvc在控制层返回的路径设置,jeecms_sys是action默认返回的目录。如果文件不在这个目录则无法找到相应的文件,并且配置了只能匹配.html文件。
8.定义springmvc的view目录及登陆地址。
9.在spring中配置好资源文件,使spring mvc在html文件能够读到资源文件信息。
10.配置数据库hibernate的xml文件hbm.xml文件
11.java对象与hbm.xml文件交换对象的bean对象创建。
12.DAO层配置,这是直接与数据库找交道的层。
13.业务层(service)对象配置,也就是常说的上通DAO层下达控制层的中间层
14.控制层也就是action层,是业务层与view层的桥梁
15.在spring文件中配置dao、service对象形成单例,以便在服务器启动的时候加载 。
16.到这里通过单元测试类test类测试业务层与数据的操作,需要添加junit4到工程中。https://github.com/zl19861124/jeecms/blob/master/src/com/jeecms/cms/test/test.java
17.好了到现在为止,springmvc业务代码就OK了。接下来开发html文件(数据显示用标签实现)。
18.编辑界面代码通过freemarker来实现。
19.到这里代码从数据库表到业务层到视图层的代码就完成了,接下来我们codeFactory发布到tomcat中去tomcat用户名是admin密码admin)
20.项目发布成功后访问地址 http://127.0.0.1:8088/codeFactory/jeeadmin/jeecms/index.do
21.登陆成功后进入后台界面:强大的后台管理系统不需要一行代码就完成了。到这里一步相信很多人已经糊涂了,这个流程太复杂了
22. 强大的功能制定,可以任由你选择。
23.当这一步项目就演示结束了,欢迎大家学习,严禁商用(消化理解jeecms后改进的,只希望更多人了解cms)。
24、感谢 www.jeecms.com提供了如何优秀的开源项目,以后还会推出权限、流程审批、maven、svn、代码自动生成(从建表到业务层代码界面显示,不需要写一行代码就自动实现)。
顶
踩
评论
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------
Java backtrace for programmers:
----------
freemarker.core.NonStringException: Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
at freemarker.core.Expression.getStringValue(Expression.java:126)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.common.web.ProcessTimeFilter.doFilter(ProcessTimeFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
[framework] 2013-10-11 14:41:51,077 -224283 [http-8080-4] ERROR freemarker.runtime - Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------
Java backtrace for programmers:
----------
freemarker.core.NonStringException: Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
at freemarker.core.Expression.getStringValue(Expression.java:126)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.common.web.ProcessTimeFilter.doFilter(ProcessTimeFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
2013-10-11 14:44:05 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------
我遇到和你一样的问题,你解决了吗?
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------
Java backtrace for programmers:
----------
freemarker.core.NonStringException: Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
at freemarker.core.Expression.getStringValue(Expression.java:126)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.common.web.ProcessTimeFilter.doFilter(ProcessTimeFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
[framework] 2013-10-11 14:41:51,077 -224283 [http-8080-4] ERROR freemarker.runtime - Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------
Java backtrace for programmers:
----------
freemarker.core.NonStringException: Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
at freemarker.core.Expression.getStringValue(Expression.java:126)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jeecms.common.web.ProcessTimeFilter.doFilter(ProcessTimeFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
2013-10-11 14:44:05 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
Error on line 34, column 59 in jeecms_sys/channel/list.html
Expecting a string, date or number here, Expression root! is instead a freemarker.template.SimpleSequence
The problematic instruction:
----------
==> ${root!} [on line 34, column 57 in jeecms_sys/channel/list.html]
----------