Reputation: 9646
I'm setting my properties in app-servlet.xml
with a bean like this:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/my.properties"></property>
</bean>
Most of the time I access the properties in my controllers or other classes like this:
@Value("${dbtype}")
public String dbType;
But what if I want to use a property in a JSP file and bypass the controller. Meaning I don't want the value type being passed from the controller to the JSP as a model attribute.
Is there a way to access properties directly in a jsp?
Upvotes: 23
Views: 76098
Reputation: 21
<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>
----------------------------------------------------------------------------------------
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!!!!!
---------------------------------------------------------------------------------
Upvotes: -2
Reputation: 307
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
id="messageSource"
p:basenames="WEB-INF/i18n/site"
p:fallbackToSystemLocale="false"/>
Now this is your Properties File
site.name=Cool Bananas
And here goes your JSP
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<html>
<head>
<title><spring:message code="site.name"/></title>
</head>
<body>
</body>
</html>
Upvotes: 10
Reputation: 6196
What you can also do that doesn't tie you to looking up properties in a single property placeholder, or if you are using java config and just instantiating a PropertySourcesPlaceholderConfigurer is use the environment object:
<spring:eval expression="@environment.getProperty('application_builtBy')" />
Upvotes: 24
Reputation: 1613
Spring config
<util:properties id="propertyConfigurer"
location="classpath:yourPropertyFileClasspathHere "/>
<context:property-placeholder properties-ref="propertyConfigurer" />
jsp
<spring:eval expression="@propertyConfigurer.getProperty('propertyNameHere')" />
Upvotes: 37
Reputation: 10377
In context just do this:
<util:properties
id="propertyConfigurer"
location="classpath:yourPropertyFileClasspathHere"
/>
<context:property-placeholder properties-ref="propertyConfigurer" />
for creating Properties bean(same as @nkjava.blogspot.com in his answer). But this is not all work need todo.
Now you need to expose this bean to JSP. There are few way to do this, depends on type of view resolver. There is solution for InternalResourceViewResolver - you need to set "exposeContextBeansAsAttributes" to true and populate "exposedContextBeanNames" with list of required beans.
For tiles also are solution.
Than you can simply use this bean in your JSP. Via EL for example:
${propertyConfigurer['my.string.from.prop.file']}
Upvotes: 1