freemarker.core.InvalidReferenceException异常

本文主要介绍了在使用Freemarker模板引擎时遇到的`InvalidReferenceException`异常,该异常通常由于尝试访问未定义的对象属性引起。通过在访问属性前检查对象是否为空,可以避免此类错误。解决方案是在代码中增加对象判空操作,确保在执行属性获取之前对象已初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Expression page.url is undefined on line 6, column 7 in web/pages/ftl/common/page.ftl.
The problematic instruction:
----------
==> if (page.url.indexOf("?") > 0) [on line 6, column 1 in web/pages/ftl/common/page.ftl]
 in include "../common/page.ftl" [on line 34, column 25 in web/pages/ftl/news/news.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression page.url is undefined on line 6, column 7 in web/pages/ftl/common/page.ftl.
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
    at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
    at freemarker.core.Dot._getAsTemplateModel(Dot.java:78)
    at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
    at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:86)
    at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
    at freemarker.core.ComparisonExpression.isTrue(ComparisonExpression.java:111)
    at freemarker.core.ParentheticalExpression.isTrue(ParentheticalExpression.java:66)
    at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:77)
    at freemarker.core.Environment.visit(Environment.java:196)
    at freemarker.core.MixedContent.accept(MixedContent.java:92)
    at freemarker.core.Environment.visit(Environment.java:196)
    at freemarker.core.Environment.include(Environment.java:1375)
    at freemarker.core.Include.accept(Include.java:155)
    at freemarker.core.Environment.visit(Environment.java:196)
    at freemarker.core.MixedContent.accept(MixedContent.java:92)
    at freemarker.core.Environment.visit(Environment.java:196)
    at freemarker.core.Environment.process(Environment.java:176)
    at freemarker.template.Template.process(Template.java:231)
    at com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214)
    at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143)
    at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208)
    at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175)
    at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
    at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.webwork.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:169)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
    at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
    at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:273)
    at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

一般出现这种异常的原因为:如果对象为空,则freemarker就会抛出这个异常。

其实解决很简单,在用对象之前先判空,不空在进行属性的获取操作即可。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值