主题 : jeecms2012版设置freemarkerViewResolver的sexposeRequestAttributes为true后出错
级别: 秀才
UID: 30791
积分:79 加为好友
威望: 0 精华: 0
主题:8 回复:35
注册时间:2012-03-12
在线时长:0
1#   发表于:2012-07-14 12:39:49  IP:116.249.*.*
为了在模板中获取url参数,修改了配置文件jeecms-servlet-front.xml如下
<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>
<property name="exposeRequestAttributes" value="true"/>  注:原为false
<property name="exposeSessionAttributes" value="false"/>
<property name="exposeSpringMacroHelpers" value="true"/>
</bean>

页面提示如下错误:
2012-7-13 18:32:57 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [JeeCmsFront] in context with path [/] threw exception [Cannot expose request attribute '_start_time' because of an existing model object of the same name] with root cause
javax.servlet.ServletException: Cannot expose request attribute '_start_time' because of an existing model object of the same name
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:123)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
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:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
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:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
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:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.jeecms.common.web.ProcessTimeFilter.doFilter(ProcessTimeFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1805)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

查了下_start_time,原来是ProcessTimeFilter中为了[@process_time/]标签计算执行时间在request中增加了_start_time属性,这很正常,但是为什么会报错呢?应该是什么地方重复向request中写入了_start_time属性,望尽快解决,谢谢。

暂时用不上[@process_time/]标签,干脆将ProcessTimeFilter.java中的下面一句给注释掉了
request.setAttribute(START_TIME, time);
心想这下不会报错了,总可以获取到url参数了吧,结果还是获取不到,到底怎么回事?
使用的url地址是http://localhost:8080/?myid=1(首页地址后面加了个参数,想在模板中使用这个参数),模板中使用了如下的各种写法:
${myid}
${request.myid}
${request["myid"]}
${requestParameters.myid}
${requestParameters["myid"]
……
级别: 状元
UID: 33380
积分:50625 加为好友
威望: 21 精华: 3
主题:88 回复:30687
注册时间:2012-05-07
在线时长:0
2#   发表于:2012-07-14 13:37:26  IP:59.243.*.*
改了源码肯会报错啊,改动源码出什么问题也不是什么bug,有问题倒安装与使用发帖,切勿跑题!
功成由勤,业精于勤。
级别: 秀才
UID: 30791
积分:79 加为好友
威望: 0 精华: 0
主题:8 回复:35
注册时间:2012-03-12
在线时长:0
3#   发表于:2012-07-14 15:51:41  IP:116.249.*.*
改了源码肯会报错啊,改动源码出什么问题也不是什么bug,有问题倒安装与使用发帖,切勿跑题!


兄弟,麻烦你看清楚,改了配置文件的参数而已,而且是spring允许的参数,这种情况下出错称为bug也不算错吧?
至于后面修改程序,只是修改了参数后程序报错之后进行调试而已,目的是为了方便你们找问题,这种做法别的公司高兴还来不及呢,怎么你们还如此反应?
级别: 状元
UID: 33380
积分:50625 加为好友
威望: 21 精华: 3
主题:88 回复:30687
注册时间:2012-05-07
在线时长:0
4#   发表于:2012-07-14 15:57:16  IP:59.243.*.*
没有这意思,您就改了true这个参数吗?
功成由勤,业精于勤。
1 共1页