Средства получения / установки для java.util.properties

#java #xml #jsp #setter #getter

#java #xml #jsp #установщик #средство получения

Вопрос:

Я хочу отображать свойства в HTML / XML через jsp. Например, как:

 ${MyClass.properties.propertieOne}
  

Я создал расширенный класс свойств MProperties, но как я могу создать геттеры в этом классе для своих свойств?

BR Колесар

Комментарии:

1. Обычно файлы .properties представлены в виде карты, поэтому вам нужно будет предоставить геттеры для ключей карты и использовать их в своем выражении. AFAIK ${...} доступны только для чтения, поэтому здесь вам не нужен специальный сеттер.

Ответ №1:

вы можете создать класс для обработки ваших свойств с помощью конструктора, например

 private Properties props = null;

    private MyProperties() throws IOException {

        FileInputStream propFile = new FileInputStream(FULL_PATH);
        props = new Properties(System.getProperties());
        props.load(propFile);

        RegistryManager rm = RegistryManager.singleton();
        rm.addRegistry("MyProperty", this);
    }

public static MyProperties Singelton() {
        synchronized (MyProperties.class) {
            if (theInstance == null) {
                try {
                    theInstance = new MyProperties();
                } catch (IOException e) {
                    throw new MissingResourceException("Unable to load property file ""   FULL_PATH   """, MyProperties.class.getName(),
                            PROPERTIES_FILENAME);
                }
            }
        }
        return theInstance;
    }
  

и чем получать свойства одним методом, например

 public static String getProperty(String propertyName) {
        String value = Singelton().props.getProperty(propertyName);
        if (value == null) {
            LOGGER.warning("propertyName ("   propertyName   ") not found in property file ("   FULL_PATH   ")");
        }

        return value;
    }
  

наконец, в коде вы можете вызывать только

 String desiredProperty = MyProperties.getProperty("propertyKey");
  

какой-то код отсутствует, а какой-то вам, возможно, не понадобится, но вы должны понять, если это то, что вы хотели сделать…

Ответ №2:

Вы можете использовать store(Writer writer, String comments) метод в Properties классе. Запишите свои свойства в StringWriter и используйте строку из него для печати в HTML.

Ответ №3:

${yourObject.properties.propertyOne} работает. Properties extends Hashtable implement Map и ${map.key} дает вам значение под этим ключом. Но вы не должны использовать сеттер из JSP, так что это только для целей отображения.

Но вы не можете получить к нему доступ напрямую из статического поля. Вы должны добавить его в какой-либо контекстный запрос или приложение. Например, в ServletContextListener.contextInitialized(..) :

 servletContext.addAttribute("yourProperties", MyClass.properties);
  

(тогда вам нужно будет сопоставить <listener> web.xml , конечно)

Ответ №4:

Если вы расширили Properties , вы, вероятно, точно знаете, какие поля вы хотите иметь. В этом случае, казалось бы, было бы лучше просто создать POJO (простой объект) с этими полями и соответствующими геттерами (и сеттерами и / или конструктором по вашему желанию). Если вам каким-то образом нужна динамичность (?) Properties , игнорируйте этот ответ.