JSF - Passando objeto de um Managed Bean para uma Lista

1 resposta
W

Saudações!

Gostaria de saber como adicionar um objeto em uma lista através de um Managed Bean? Mas considere que não quero definir a lista no Managed Bean.
Considerem as seguintes classes:

package model;

public class Coisa {

    private String a;
    private String b;;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

    public Coisa(String a, String b) {
        this.a = a;
        this.b = b;
    }

    public Coisa() {
    }
    
}

Classe Monte que contém uma lista de objetos Coisa. É aqui que quero adicionar os objetos

package model;

import java.util.ArrayList;
import java.util.List;

public class Monte {
    private List<Coisa> coisas = new ArrayList<Coisa>();

    public List<Coisa> getCoisas() {
        return coisas;
    }

    public void setCoisas(Coisa umaCoisa) {
        this.coisas.add(umaCoisa);
    }

    public Monte(){
       // dessa forma consigo adicionar:
       // this.coisas.add(new Coisa("AAA", "BBB"));
    }

}

}

Managed Bean ControlaMonte:

package control;

import model.Coisa;
import model.Monte;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "controla")
@SessionScoped

public class ControlaMonte {
    private Coisa coisa;
    private Monte monte;

    public Coisa getCoisa() {
        return coisa;
    }

    public void setCoisa(Coisa coisa) {
        this.coisa = coisa;
    }

    public Monte getMonte() {
        return monte;
    }

    public void setMonte(Monte monte) {
        this.monte = monte;
    }

    public ControlaMonte() {
        this.coisa = new Coisa();
        this.monte = new Monte();
    }
    
}
Formulário - index.html
...
<body>
            <h:outputText value="Insere coisas"/>
            <p>
                <h:form>
                    <h:inputText value="#{controla.coisa.a}"/>
                    <h:inputText value="#{controla.coisa.b}"/>
                    <h:commandButton value="Mostra" action="mostra"/>
                </h:form>
        </body>
...

Listagem - mostra.jsp

...
      <body>
            <h:outputText value="Lista um monte de coisas"/>
         <h:form>
             <h:dataTable value="#{controla.monte.coisas}" var="coisas">
               <h:column>
                  <h:outputText value="#{coisas.a}, "/>
               </h:column>

               <h:column>
                  <h:outputText value="#{coisas.b}"/>
               </h:column>
            </h:dataTable>
         </h:form>
      </body>
...

Já tentei criar alguns métodos na classe ControlaMonte com o objetivo de adicionar na lista da classe Monte. Entre várias idéias, fiz algo do tipo:

...
public void adicionar(){
   this.monte.add(this.coisa);
}
...

Já vi vários exemplos que adionam objetos na lista que encontra-se em um MangedBean, mas não é assim que desejo.

Grato pela atenção.

Willian

1 Resposta

W

Saudações.

Consegui resolver. Na verdade é simples (pra variar).

Inseri no ManagedBean ControlaMonte o seguinte método:

public String adiciona(){
        this.monte.setCoisas(this.coisa);
        return "mostra";
    }

Com esse método, após adicionar o objeto coisa na lista de monte retorno uma String “mostra” a qual é usada para navegar até a página mostra.jsp, onde a lista de coisas são retornadas para view.

Valeu!

Willian

Criado 14 de janeiro de 2011
Ultima resposta 14 de jan. de 2011
Respostas 1
Participantes 1