Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring表达式语言-确定是否定义了servletContext变量_Java_Spring_Spring El - Fatal编程技术网

Java Spring表达式语言-确定是否定义了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

在spring上下文xml文件中,我使用spring EL表达式根据servletContext预定义变量是否为null以不同方式加载属性文件。以下是Spel表达式(为可读性而格式化):

在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
对象是一个
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>