загрузка значений файла свойств в web.xml с помощью servletContextListener

я хочу загрузить файл свойств формы значений в мой web.xml

это мой файл web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
package com.kpowd.utility;

import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class PropertyReading implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub

    }

    @Override
    public void contextInitialized(ServletContextEvent event) {

        final String props = "/config.properties";
        final Properties propsFromFile = new Properties();
        try {               
            propsFromFile.load(getClass().getResourceAsStream(props));

        } catch (final IOException e) {
            e.printStackTrace();
        }
        for (String prop : propsFromFile.stringPropertyNames())
          {
             if (System.getProperty(prop) == null)
             {
                 System.setProperty(prop, propsFromFile.getProperty(prop));
             }
          }

    }

}
5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app
package com.kpowd.utility;

import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class PropertyReading implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub

    }

    @Override
    public void contextInitialized(ServletContextEvent event) {

        final String props = "/config.properties";
        final Properties propsFromFile = new Properties();
        try {               
            propsFromFile.load(getClass().getResourceAsStream(props));

        } catch (final IOException e) {
            e.printStackTrace();
        }
        for (String prop : propsFromFile.stringPropertyNames())
          {
             if (System.getProperty(prop) == null)
             {
                 System.setProperty(prop, propsFromFile.getProperty(prop));
             }
          }

    }

}
5.xsd" id="WebApp_ID" version="2.5"> <!-- Property listeners --> <listener> <listener-class>com.kpowd.utility.PropertyReading</listener-class> </listener> <display-name>JSF 2 + Spring 3 Integration example</display-name> <!-- The welcome page --> <welcome-file-list> <welcome-file>login.xhtml</welcome-file> </welcome-file-list> <!-- Spring listeners --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml </param-value> </context-param> <!-- Change the primeface theme --> <context-param> <param-name>primefaces.THEME</param-name> <param-value>${primefacestheme}</param-value> </context-param> <!-- Spring Security --> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Start JSF --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- JSF URL mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> </web-app>

и это мой класс прослушивателя контекста сервлета

package com.kpowd.utility;

import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class PropertyReading implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub

    }

    @Override
    public void contextInitialized(ServletContextEvent event) {

        final String props = "/config.properties";
        final Properties propsFromFile = new Properties();
        try {               
            propsFromFile.load(getClass().getResourceAsStream(props));

        } catch (final IOException e) {
            e.printStackTrace();
        }
        for (String prop : propsFromFile.stringPropertyNames())
          {
             if (System.getProperty(prop) == null)
             {
                 System.setProperty(prop, propsFromFile.getProperty(prop));
             }
          }

    }

}

когда я печатаю значения из этого класса, он показывает мне значения свойств, но в web.xml, когда я пытаюсь получить доступ к этому значению ${primefacestheme}, он не загружается

и это мой файл config.properties

primefacestheme=glass-x
wellcomepage=accdenied.xhtml

пожалуйста, помогите мне


person user2567005    schedule 27.07.2014    source источник
comment
Можете ли вы проверить изменение web.xml <context-param> <param-name>primefacestheme</param-name> <param-value>${primefacestheme}</param-value> </context-param>   -  person Amogh    schedule 27.07.2014
comment
Я предполагаю, что имя ключа свойства и <param-name> должны быть одинаковыми, как говорит ваш код System.setProperty(prop, propsFromFile.getProperty(prop));   -  person Amogh    schedule 27.07.2014
comment
Да, возможно, это сработало отлично, спасибо, приятель. Вы можете опубликовать это как ответ, чтобы я мог пометить его как ответ   -  person user2567005    schedule 27.07.2014


Ответы (2)


Можете ли вы проверить изменения в web.xml:

<context-param>
   <param-name>primefacestheme</param-name> 
   <param-value>${primefacestheme}</param-value>
</context-param>

Поскольку config.properties имеет имя ключа свойства как primefacestheme, и в коде мы проверяем это имя ключа, и если его null, то устанавливаем значение свойства для этого имени ключа.

Короче говоря, <param-name> и имя ключа свойства должны совпадать.

person Amogh    schedule 27.07.2014

Поскольку ваш файл свойств содержит ключ как primefacestheme, но при вызове его значения вы пытаетесь использовать какой-то другой ключ

изменить это

<context-param>
  <param-name>primefaces.THEME</param-name>
  <param-value>${primefacestheme}</param-value>
</context-param>

to

<context-param>
  <param-name>primefacestheme</param-name>
  <param-value>${primefacestheme}</param-value>
</context-param>
person SparkOn    schedule 27.07.2014