Como faco para fazer um arquivo properties que possa ter uma variavel na mensagem? Sem precisar fazer uma funcao para substituir um caractere na string
± assim:
arquivo.properties
msg.to.pessoa.contatos=Ola $VARIAVEL, seja bem vindo ao sistema
Como faco para fazer um arquivo properties que possa ter uma variavel na mensagem? Sem precisar fazer uma funcao para substituir um caractere na string
± assim:
arquivo.properties
msg.to.pessoa.contatos=Ola $VARIAVEL, seja bem vindo ao sistema
Utilize o jakarta commons-configurations. A sintaxe é ${variavel}
Rafael
no site da apache o exemplo que eles dao:
application.name = Killer App
application.version = 1.6.2
application.title = ${application.name} ${application.version}
utiliza "variaveis" do proprio arquivo properties, eu estava querendo trocar essas variaveis em tempo de execucao dentro de um metodo. como faco?
[]'s
Basta adiciona-las
depois de carregar o arquivo. Nao tem segredo.
Rafael
Eu precisei fazer isso a muito tempo atrás, e na época eu usei o Velocity para fazer essa troca de variáveis por conteúdo dinamico.
planos.nome.plano=
planos.nome.acao=
planos.nome.responsavel=
planos.nome.lider=
planos.data.ultimo.acompanhamento=
planos.msg.acompanhamento.atrasado=\
Bom dia, \n\n\
O Plano de Ação "${nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:\n\n\
"${nome.acao}"\n\
-Nome do responsávl: ${nome.responsavel}\n\
-Nome do líder do plano: ${nome.lider} \n\
-Data do último acompanhamento: ${data.ultimo.acompanhamento} \n\n\
Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".\n\n\n\
Atenciosamente,\n\n\
Coordenadoria de Tecnologia da Informação - COTEC
package br.gov.ce.seplag.cronmail.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Properties;
import java.io.Serializable;
public class PropertiesHelper implements Serializable {
private static final long serialVersionUID = 1533667673359633782L;
/**
* Store for each propertie file, a instance of java.util.Properties.
*/
private Hashtable<String, Properties> propertyFiles = null;
/**
* Singleton Instance.
*/
private static PropertiesHelper instance = null;
/**
* Private Constructor, for implementing a singleton pattern.
*/
private PropertiesHelper() {
}
/**
* Return the instance for the Resource Bundle.
* @return The singleton instance.
*/
public static synchronized PropertiesHelper getInstance() {
if (instance == null) {
instance = new PropertiesHelper();
}
return instance;
}
/**
* Loads the properties file.
* @param fileName - File name of the property file.
*/
private void loadPropertiesFile(final String fileName) {
Properties prop;
// tests if the properties is null.
if (propertyFiles == null) {
propertyFiles = new Hashtable<String, Properties>();
}
try {
// Gets the classloader for the container
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader = getClass().getClassLoader();
}
InputStream input = classLoader.getResourceAsStream(fileName);
if (input != null) {
prop = new Properties();
try {
prop.load(input);
propertyFiles.put(fileName, prop);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Returns the property name the propery name.
* @param rscBdlFileName - The property file name.
* @param propName - The property name.
* @return - The property value.
*/
public String getProperty(final String rscBdlFileName, final String propName) {
Properties prop = null;
String propValue = null;
// Verify if the propety file was loaded
if (propertyFiles == null || propertyFiles.get(rscBdlFileName) == null) {
loadPropertiesFile(rscBdlFileName);
}
if (propertyFiles != null && propertyFiles.get(rscBdlFileName) != null) {
prop = propertyFiles.get(rscBdlFileName);
propValue = prop.getProperty(propName);
if (propValue == null) {
return "";
}
}
return propValue;
}
public void setProperty (final String rscBdlFileName, final String propName, final String propValue) {
Properties prop = null;
// Verify if the propety file was loaded
if (propertyFiles == null || propertyFiles.get(rscBdlFileName) == null) {
loadPropertiesFile(rscBdlFileName);
}
if (propertyFiles != null && propertyFiles.get(rscBdlFileName) != null) {
prop = propertyFiles.get(rscBdlFileName);
prop.setProperty(propName, propValue);
}
}
}
String configPropertiesFile = "messages.properties";
PropertiesHelper configProperties = PropertiesHelper.getInstance();
configProperties.setProperty(configPropertiesFile, "planos.nome.plano", nomePlano.toUpperCase());
configProperties.setProperty(configPropertiesFile, "planos.nome.acao", nomeAcao.toUpperCase());
configProperties.setProperty(configPropertiesFile, "planos.nome.responsavel", responsavel.toUpperCase());
configProperties.setProperty(configPropertiesFile, "planos.nome.lider", nomeLider);
configProperties.setProperty(configPropertiesFile, "planos.data.ultimo.acompanhamento", dataAuxStr);
String msgAcompanhamentoAtrasado = configProperties.getProperty(configPropertiesFile, "planos.msg.acompanhamento.atrasado");
a mensagem esta vindo assim:
Bom dia,O Plano de Ação "${nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:
"${nome.acao}"
-Nome do responsávl: ${nome.responsavel}
-Nome do líder do plano: ${nome.lider}
-Data do último acompanhamento: ${data.ultimo.acompanhamento}Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".
Atenciosamente,
Coordenadoria de Tecnologia da Informação - COTEC
que estou fazendo errado? jah adicionei a commons-configuration no meu projeto
**EDIT**
-_- ... quando eu postei aqui percebi que os nomes das variaveis tao diferentes no propertie :/ ... vou mudar :~
continua nao atualizando as variaveis do propertie:
planos.nome.plano=
planos.nome.acao=
planos.nome.responsavel=
planos.nome.lider=
planos.data.ultimo.acompanhamento=
planos.msg.acompanhamento.atrasado=\
Bom dia, \n\n\
O Plano de Ação "${planos.nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:\n\n\
"${planos.nome.acao}"\n\
-Nome do responsávl: ${planos.nome.responsavel}\n\
-Nome do líder do plano: ${planos.nome.lider} \n\
-Data do último acompanhamento: ${planos.data.ultimo.acompanhamento} \n\n\
Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".\n\n\n\
Atenciosamente,\n\n\
Coordenadoria de Tecnologia da Informação - COTEC
agora sim, que fiz de errado?
Talvez possa utilizar “MessageFormat” para o que quer.
É possível fazer isso:
Object[] arguments = {
new Integer(7),
new Date(System.currentTimeMillis()),
"a disturbance in the Force"
};
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
arguments);
output: At 12:30 PM on Jul 3, 2053, there was a disturbance
in the Force on planet 7.
Falow…
cara, precisa de mais alguma coisa, alem de adicionar o jar no projeto? fiz igual tem no exemplo da apache e quando eu mando imprimir ele nao esta substituindo as variaveis :?
precisa de mais algum jar alem desse: commons-configuration-1.5.jar
?? alguma config em algum xml?
[]'s
Estou tendo um probleminha em tempo de compilação com o Commons Configurations.
Tenho uma classe PropertiesHelper que implementa um singleton, ela ta ali em cima. Tentei modificar a classe para funcionar com o Commons Config, mas estou tendo problemas em um metodo. Nao esta compilando
private void loadPropertiesFile(final String fileName) {
PropertiesConfiguration prop;
// tests if the properties is null.
if (propertyFiles == null) {
propertyFiles = new Hashtable<String, PropertiesConfiguration>();
}
// Gets the classloader for the container
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader = getClass().getClassLoader();
}
InputStream input = classLoader.getResourceAsStream(fileName);
if (input != null) {
prop = new PropertiesConfiguration();
try {
prop.load(input);
} catch (ConfigurationException ex) {
Logger.getLogger(PropertiesHelper.class.getName()).log(Level.SEVERE, null, ex);
}
propertyFiles.put(fileName, prop);
}
}
o erro que esta dando eh no try-catch:
Incompatible types.
received: org.apache.commons.configuration.ConfigurationException
requiered: java.lang.Throwable
eu ja tentei usar o try catch usando o thrwable:
try {
prop.load(input);
} catch (Throwable th) {
//TODO
}
problema eh o seguinte, quando eu coloco o catch para ConfigurationException ele da erro, mas quando eu tiro ele diz que existe uma excecao nao reportada … Jah tentei soh com o Throwable , soh com o ConfigurationException e com os dois … nenhum funcionou.
Que faco?
[]'s
tava faltando esse jar: commons-lang-2.4.jar
[]'s
consegui compilar o programa, mas ele continua nao trocando as variaveis
ele nao esta trocando os ${variavel} pelo valor de variavel no property …
porque?
EDIT
cara … to jah desistindo … vou acabar usando uma gambiarra e fazer uma funcao para trocar ${variavel} por um valor que eu vou passar na funcao