Algo muito interessante em linguagens como o PHP, é um recurso conhecido como variáveis dinâmicas, que consiste basicamente em criar uma variável on-the-fly.
Um código PHP de exemplo seria mais ou menos assim:
while (list($key,$val) = each($_POST)){
$var = $key;
$$var = $val;
}
O código acima cria uma variável para cada chave do vetor $_POST e atribuir os valores de cada chave na variável criada.
Um recurso conhecido dos programadores JSF um pouco mais experientes ( e suposto pelos não tão experientes ) é a vinculação de valores. Este recurso não tem nada a ver com variáveis dinâmicas, mas pode ajudar a fixar valores em loopings com apenas uma linha =)
Podemos obter este efeito com os seguintes métodos:
/**
* Retorna o valor de uma variável, através do
* ValueBinding de uma expressão EL
*
* @param parameterEL
* @return
*/
public ValueBinding getParameter(String parameterEL){
FacesContext ctx = FacesContext.getCurrentInstance();
Application app = ctx.getApplication();
ValueBinding valueBinding =
app.createValueBinding(parameterEL);
return valueBinding;
}
/**
* Fixa o valor de uma variável, através do
* ValueBinding de uma expressão EL
*
* @param parameterEL
* @param parameter
* @return
*/
public void putParameter(String parameterEL, Object parameter){
FacesContext ctx = FacesContext.getCurrentInstance();
Application app = ctx.getApplication();
ValueBinding binding = ctx.getApplication().createValueBinding(parameterEL);
binding.setValue(ctx,parameter);
}
Isto se encarregará de atribuir e retornar os valores das propriedades de uma determinada classe (lembrando que estamos falando sobre managed-beans). Poderíamos utilizar métodos para simplificar o uso dos expostos acima, da seguinte maneira:
public Object getValue(String pripriedade){
return getParameter("#{NomeDaClasse." + pripriedade + "}").getValue(getContext());
}
public void putValue(String propriedade, Object valor){
putParameter("#{NomeDaClasse." + propriedade + "}", valor);
}
Isto nos permite fazer coisas do tipo:
HashMap hashMap = new HashMap();
hashMap.put("chave1","valor1");
hashMap.put("chave2","valor2");
hashMap.put("chaveN","valorN");
for (Object propriedade : hashMap.keySet())
putValue(propriedade, hashMap.get(propriedade));
Agora basta que na classe NomeDaClasse, estejam definidas as variáveis chave1, chave2, chaveN com os respectivos gets e sets, para que possamos setar várias propridades de um objeto com apenas uma linha. =)