java – Spring表达式 – 确定是否定义了servletContext变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring表达式 – 确定是否定义了servletContext变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1316字,纯文字阅读大概需要2分钟。
内容图文
![java – Spring表达式 – 确定是否定义了servletContext变量](/upload/InfoBanner/zyjiaocheng/818/9b2384264a114666ad3ab88c7b47a4da.jpg)
在spring上下文xml文件中,我使用spring EL表达式根据servletContext预定义变量是否为null来加载属性文件.下面是Spel表达式(为便于阅读而格式化):
#{
systemProperties['my.properties.dir'] != null ?
'file:' + systemProperties['my.properties.dir'] + '/' :
(servletContext != null ?
'file:/apps/mydir' + servletContext.getContextPath() + '/' :
'classpath:')
}my.properties
当我在Web应用程序中运行时,一切都很好.但是,当我在独立应用程序中运行时(意味着未定义servletContext预定义变量),我收到以下错误:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 109): Field or property 'servletContext' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
有没有办法确定servletContext是否存在?或者某种方式避免未定义时的异常?
解决方法:
您需要评估bean的存在与否;你不能只测试它是否为null因为它试图使用不存在的bean.
评估的#root对象是BeanExpressionContext.
这应该让你朝着正确的方向前进……
<bean id="foo" class="java.lang.String">
<constructor-arg value="#{containsObject('bar') ? bar : 'foo'}" />
</bean>
<bean id="bar" class="java.lang.String">
<constructor-arg value="bar" />
</bean>
所以你会用……
#{containsObject(‘servletContext’)? … servletContext.contextPath …:…
请注意,您可以在三元表达式的值部分中“引用”bean(当布尔部分的计算结果为true时),您无法在布尔部分中引用它.
内容总结
以上是互联网集市为您收集整理的java – Spring表达式 – 确定是否定义了servletContext变量全部内容,希望文章能够帮你解决java – Spring表达式 – 确定是否定义了servletContext变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。