我在我的应用程序上下文中使用 Spring 3 和 Spring 的属性占位符:
<context:property-placeholder location="my.properties"/>
my.properties 包含:
key1=value1
key2=some JSP code ${some-model-attr}
Run Code Online (Sandbox Code Playgroud)
问题是,该值在my.properties对占位符也被评估,但对我来说,值包含JSP EL,导致春季初始化过程中的错误“未找到属性”:
java.lang.IllegalArgumentException: Could not resolve placeholder 'some-model-attr'
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个解决方法,但它很难看:
key1=value1
key2=some JSP code #{'$'}{some-model-attr}
Run Code Online (Sandbox Code Playgroud)
因此我的问题是:
是否可以告诉 Spring 不要插入属性占位符值,或者换句话说,不要递归评估占位符?
看起来不可能告诉 Spring 不要递归地计算占位符。
占位符通过org.springframework.util.PropertyPlaceholderHelper包含以下行(在 Spring 3 中)进行评估:
// Recursive invocation, parsing placeholders contained in the placeholder key.
placeholder = parseStringValue(placeholder, placeholderResolver, visitedPlaceholders);
Run Code Online (Sandbox Code Playgroud)
因此,递归调用被硬编码到计算中。
不过,我认为您可以更改占位符的默认前缀和后缀,以便对 Spring 占位符使用不同的语法。<context:property-placeholder>只是构造org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类的一种便捷方法,并且该类具有方法setPlaceholderPrefix()和setPlaceholderSuffix()。您可以使用这些方法将 Spring 占位符的语法更改为:
$[property]
Run Code Online (Sandbox Code Playgroud)
代替
${property}
Run Code Online (Sandbox Code Playgroud)
然后我预计 Spring 将不再解析您的 JSP 属性,因为它们采用不同的语法:
key2=some JSP code ${some-model-attr}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2125 次 |
| 最近记录: |