Java Spring表达式语言-确定是否定义了servletContext变量
在spring上下文xml文件中,我使用spring EL表达式根据servletContext预定义变量是否为null以不同方式加载属性文件。以下是Spel表达式(为可读性而格式化): 在web应用程序中运行时,一切正常。但是,当我在独立应用程序中运行(意味着未定义servletContext预定义变量)时,会出现以下错误:Java Spring表达式语言-确定是否定义了servletContext变量,java,spring,spring-el,Java,Spring,Spring El,在spring上下文xml文件中,我使用spring EL表达式根据servletContext预定义变量是否为null以不同方式加载属性文件。以下是Spel表达式(为可读性而格式化): 在web应用程序中运行时,一切正常。但是,当我在独立应用程序中运行(意味着未定义servletContext预定义变量)时,会出现以下错误: Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos
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
对象是一个BeanPressionContext
这应该是你的正确方向
<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时),但不能在布尔部分引用它
<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>