如何在Spring MVC应用程序中显示JSP中属性文件的值

时间:2013-02-27 11:43:53

标签: java spring jsp spring-mvc

我在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中访问属性?

5 个答案:

答案 0 :(得分:34)

春季配置

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

<强> JSP

<spring:eval expression="@propertyConfigurer.getProperty('propertyNameHere')" />

答案 1 :(得分:17)

您还可以做的事情并不是在单个属性占位符中查找属性,或者如果您使用的是java配置并且只是实例化PropertySourcesPlaceholderConfigurer,则使用环境对象:

<spring:eval expression="@environment.getProperty('application_builtBy')" />

答案 2 :(得分:9)

<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>

答案 3 :(得分:0)

在上下文中这样做:

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

用于创建属性bean(与answer中的@ nkjava.blogspot.com相同)。 但这不是所有工作都需要todo。

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

tiles也是解决方案。

您可以在JSP中简单地使用此bean。以EL为例:

${propertyConfigurer['my.string.from.prop.file']}

答案 4 :(得分:0)

在春季版本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!!!!!
    ---------------------------------------------------------------------------------