#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
, игнорируйте этот ответ.