2013-06-10 11 views
11

spring mvc 3アノテーションベースのアプリケーションには非常に新しいです。 general.properties、 WEB-INF \リソース\ jdbc_config.propertiesspring mvcを使用してJSPファイルのプロパティを取得する方法3

今、私は春-servlet.xmlを介してそれらを設定したい\ WEB-INF \リソース - 私は2つのプロパティファイルを持っています。どのように私はこれを達成することができる?

general.propertiesで

label.username = User Name: 
label.password = Password: 
label.address = Address: 

...など jdbc_config.properties、

app.jdbc.driverClassName=com.mysql.jdbc.Driver 
app.jdbc.url=jdbc:mysql://localhost:[port_number]/ 
app.jdbc.username=root 
app.jdbc.password=pass 

---など

私はlabel.usernameとアプリを取得したい場合.jdbc.driverClassNameは私のJSPページにありますが、どうすればそれらをコーディングできますか?

また、私のサービスからこれらのプロパティ値にアクセスしたいと思います。サービスクラスまたはコントローラクラスのメソッドレベルのそれぞれのキーを使用してこれらのプロパティ値を取得する方法

+0

の可能性の重複を使用してコントローラからプロパティを取得することができます

@PropertySource("classpath:/configs/env.properties") public class WebConfig extends WebMvcConfigurerAdapter{...} 

を設定へのこれらの行を追加します([春MVCアプリでJSP内のプロパティファイルの値を表示する方法] http://stackoverflow.com/questions/15111260/how-to-show-values-from-property-file-in-jsp-in-a-spring-mvc-app) – Vadzim

答えて

12

ファイルspring-servlet.xmlがアプリケーションコンテキストファイルの1つであると仮定します。これは、(あなたのJSPの上部にあるスプリングのtaglibを追加することを忘れないでください)あなたはJSPでのプロパティ値を取得することができる方法である

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>WEB-INF/resources/general</value> 
      <value>WEB-INF/resources/jdbc_config</value> 
     </list> 
    </property> 
</bean> 

そのような場合、その中に、次のBeanを追加
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<table> 
    <tr> 
     <td>User Name:</td> 
     <td><spring:message code="label.username" />:</td> 
    </tr> 
    <tr> 
     <td>Driver Class Name:</td> 
     <td><spring:message code="app.jdbc.driverClassName" />:</td> 
    </tr> 
etc... 
</table> 
+0

また、これらのプロパティ値を私のサービス。どのようにサービスに作成されたさまざまなメソッドからそれらにアクセスするには? – user2432330

+4

この回答は、警告なしで非常に悪い習慣が含まれています...なぜアプリケーションのプロパティをメッセージとして読み込むのですか?明らかに、プロパティのソース、プレースホルダのコンフィグレータ、アプリケーションのプロパティとメッセージリソースのバンドルの違いについて、より深い答えが必要です。 –

+0

@PavelHoralあなたはそれが悪い習慣だと言いますが、理由は説明しません。あなたは質問が深い答えに値すると言いますが、あなたはそれを提示しません。あなたの知識を私たちに教えてください! –

15

アプリケーションのプロパティ(構成)とローカライズメッセージを区別する必要があります。どちらもJAVAプロパティファイルを使用しますが、目的が異なり、処理方法も異なります。

注:以下の例では、JavaベースのSpring構成を使用しています。構成はXMLでも簡単に行うことができます。春のJavaDocreference documentationを確認してください。


アプリケーションプロパティは

アプリケーションプロパティは、アプリケーションのコンテキスト内でプロパティ源としてロードする必要があります。これはあなたの@Configurationクラスに@PropertySourceアノテーションを介して行うことができます。

@Configuration 
@PropertySource("classpath:default-config.properties") 
public class MyConfig { 

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

} 

次にあなたが@Value注釈を使用してプロパティを注入することができます

@Value("${my.config.property}") 
private String myProperty; 

ローカライズメッセージ

ローカライズのメッセージがあります少し違った話。メッセージはresource bundlesとしてロードされ、指定されたlocaleの正しい変換メッセージを取得するための特別な解決プロセスが用意されています。

春では、これらのメッセージはMessageSourcesによって処理されます。あなたはReloadableResourceBundleMessageSourceを経由して、たとえば独自に定義することができます。

@Bean 
public MessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasename("/WEB-INF/messages/messages"); 
    return messageSource; 
} 

をあなたは春がMessageSourceを注入させている場合は、豆からこれらのメッセージにアクセスすることができます。

@Autowired 
private MessageSource messageSource; 

public void myMethod() { 
    messageSource.getMessage("my.translation.code", null, LocaleContextHolder.getLocale()); 
} 

そして、あなたは<spring:message>タグを使用して、JSPでメッセージを翻訳することができます:

<spring:message code="my.translation.code" /> 
+0

ありがとうございました。アプリケーションのプロパティ(コンフィグレーション)とローカライズメッセージの間に** ** jspの**アプリケーションプロパティ**から** value **にアクセスする方法を更新してください。 –

4

は、私が環境

使用して終了しました

はあなたがautowired環境

public class BaseController { 
    protected final Logger LOG = LoggerFactory.getLogger(this.getClass()); 

    @Autowired 
    public Environment env; 

    @RequestMapping("/") 
    public String rootPage(ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) { 
     LOG.debug(env.getProperty("download.path")); 
     return "main"; 
    } 
}