Value JSF Dinâmico

7 respostas
Trevisani

Pessoal, gostaria de saber se eu consigo setar o value de um componente JSF dinâmicamente, algo como:

<h:inputText value="#{mBean.campoDesejado}" />

Mas sendo que a propriedade campoDesejado não seja o campo em si, e sim, contenha o nome do campo. (Ex: Na propriedade campoDesejado contenha “mBean.usuario.nome”)

Seria algo semelhante ao “$$” do PHP, quando eu tenho:

$variavel = "teste";
$outra_var = "variavel";

echo $$outra_var; // Printa o valor de "$variavel" ("teste")

Fui claro o suficiente? =D

Valeu!

7 Respostas

drsmachado

Bem, estamos tratando não de uma propriedade específica de um framwork, mas de uma especificação de linguagem.
Se você tentar fazer isto, utilizando recursos do zend ou do smarty, você consegue?
Até onde eu sei, o JSF não dá este suporte, além, o java em si não possui nenhum método nativo que retorne o nome de uma variável.

Trevisani

É que no caso, eu estou tentando fazer um datalist, em uma coleção de Strings, que contém os nomes dos campos que irão nos values.
Como

Então eu queria fazer algo do tipo:

// MBean.listaCampos = {"mBean.user.nome", "mBean.user.senha"};

<t:dataList value="#{mBean.listaCampos}" var="row">
    <t:inputText value="#{row}" />
</t:datalist>

E renderizar algo do tipo:

<t:inputText value="#{mBean.user.nome}" />
<t:inputText value="#{mBean.user.senha}" />
drsmachado

Como você pega uma List, que contém objetos Row (acredito que seja) e este possui as propriedades nome e senha (com getNome/setNome e getSenha/setSenha) é possível.

<t:inputText value="#{row.nome}" />
Trevisani

Acho que eu vou ter que fazer algo semelhante a isso.

MBean:

HashMap<String,Object> camposDestino = new HashMap();
List<String> campos = new ArrayList();
User u = getUser();

public MBean() {
    camposDestino.put("u.nome", u.getNome());
    campos.add("u.nome");

    camposDestino.put("u.senha", u.getSenha());
    campos.add("u.senha");
}

E no jsp:

<t:dataList value="#{mBean.campos}" var="row">  
    <t:inputText value="#{mBean.camposDestino[row]}" />  
</t:datalist>

Assim consigo dinâmicamente apontar para as referências corretas, e ter quantos inputs o usuário desejar, conforme for cadastrando no map e na list… Mas não há algo menos “gambiarrístico”?

drsmachado

camposDestino é uma list?

Trevisani

Um HashMap<String,Object> que contém as referências dos campos de um objeto qualquer, assim eu consigo ir criando inputs e “apontando” eles para diversas propriedades de objetos… mas tá me parecendo muita gambiarra…

drsmachado

Sei lá, eu colocaria em listas específicas…

Criado 31 de maio de 2011
Ultima resposta 31 de mai. de 2011
Respostas 7
Participantes 2