21

我正在app-servlet.xml使用这样的 bean 设置我的属性:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="/WEB-INF/my.properties"></property>
    </bean>

大多数时候,我访问控制器或其他类中的属性,如下所示:

@Value("${dbtype}")
public String dbType;

但是如果我想使用 JSP 文件中的属性并绕过控制器怎么办。这意味着我不希望将值类型作为模型属性从控制器传递到 JSP。

有没有办法直接在jsp中访问属性?

4

5 回答 5

36

弹簧配置

<util:properties id="propertyConfigurer" 
                  location="classpath:yourPropertyFileClasspathHere "/>
<context:property-placeholder properties-ref="propertyConfigurer" />

jsp

<spring:eval expression="@propertyConfigurer.getProperty('propertyNameHere')" />
于 2013-02-27T12:02:07.690 回答
23

您还可以执行的操作不会将您与在单个属性占位符中查找属性联系起来,或者如果您使用 java config 并且仅实例化 PropertySourcesPlaceholderConfigurer 是使用环境对象:

<spring:eval expression="@environment.getProperty('application_builtBy')" />
于 2015-01-20T14:46:25.767 回答
10
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" 
    id="messageSource"
    p:basenames="WEB-INF/i18n/site"
    p:fallbackToSystemLocale="false"/>

现在这是你的属性文件

site.name=Cool Bananas

这是你的JSP

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<html>
  <head>
    <title><spring:message code="site.name"/></title>
  </head>
  <body>
  </body>
</html>
于 2015-04-09T20:42:57.397 回答
0

在上下文中,只需这样做:

<util:properties 
    id="propertyConfigurer"
    location="classpath:yourPropertyFileClasspathHere"
/>
<context:property-placeholder properties-ref="propertyConfigurer" />

用于创建 Properties bean(与他的答案中的 @nkjava.blogspot.com 相同)。但这并不是所有需要做的工作。

现在您需要将此 bean 公开给 JSP。有几种方法可以做到这一点,取决于视图解析器的类型。InternalResourceViewResolver有解决方案- 您需要将“exposeContextBeansAsAttributes”设置为 true 并使用所需 bean 列表填充“exposedContextBeanNames”。

对于瓷砖也是解决方案。

比你可以简单地在你的 JSP 中使用这个 bean。例如通过 EL:

${propertyConfigurer['my.string.from.prop.file']}
于 2013-09-12T01:22:54.807 回答
-2

在 Spring 版本 4 中,您可以找到属性文件:

1)xml模式

                <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
                   <property name="ignoreUnresolvablePlaceholders" value="true"/>
                      <property name="locations">
                          <list>
                            <!-- default resources folder (default package maven project) -->
                             <value>classpath:mongodb.remote.properties</value>  
                                <!-- Or in /WEB-INF/ folder -->
                              <value>/WEB-INF/mongodb.remote.properties</value>  
                          </list>
                      </property>
                  </bean>
----------------------------------------------------------------------------------------

2)程序化模式:

    If you have for example this package : com.profile.config, com.profile.controller, ecc.. 
    it's not problem if you put only com.profile, it's ok !!! Now


    @Configuration
    @ComponentScan(basePackages = "com.profile")
    /** resources folder & default package maven project*/
    @PropertySource(value = { "classpath:mongodb.remote.properties" }) 
    public class MyPropertySourcesPlaceholderConfigurer {


        @Bean
        public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    }


    ---------------------------------------------------------------------------------
    Your property file

    label.test.val=this is the property file value!!!!!
    ---------------------------------------------------------------------------------

    @Controller
    public class LabelsAndValuesController {


         @Value("${label.test.val}")
         String test;

    }

输出:

    ---------------------------------------------------------------------------------
    this is the property file value!!!!!
    ---------------------------------------------------------------------------------
于 2019-02-21T01:10:17.317 回答