Struts - Popular utilizando ActionForm / HashSet

6 respostas
A

Bom dia,

Tenho o seguinte caso como exemplo:

Tenho as classes :

public class TesteItens()
{
    private String descItem;

  //GET / SET / Construtor . . .
}


public class Teste()
{
  private String descTeste;
  private Set<TesteItens> item = new HashSet<TesteItens>();
 
  //GET / SET / Construtor . . .
}

ActionForm :

public class TesteForm extends ActionForm
  {
          Teste teste = new Teste();

	  public Teste getTeste() 
	  {return teste;}

	  public void setTeste(Teste teste) 
	  {this.teste = teste;}
          
  }

Com o código descrito acima, como eu posso popular a coleção de itens (TesteItens) dentro da classe Teste ?
Pois popular o campo descTeste da classe Teste eu faço desta maneira.

<input type="text" name="teste.descTeste">

Mas não sei como popular a coleção de itens . . .

Desde já, Obrigado . . .

6 Respostas

joca_java

Estás usando DynaActionForm? ou criasse uma Action pra essa classe TesteForm?

A

Estou usando a segunda opção. Action e ActionForm. Será que eu tenho que fazer algum tipo de conversão ?

joca_java

Na verdade se fosse eu, faria meu Form assim:

public classTesteForm extendsActionForm   
{   
        private String descItem;
        private TesteItens itensTeste;

         public String getDescItem()   
         {descItem;}   
  
         public void setDescItem(String descItem)   
        {this.descItem= descItem;}   

         publicTesteItens getItensTeste(){
            return itensTeste;
         }
           
         public void setTesteItens(TesteItens itens){
            this.testeItens = itens;
         }
}

Na action…

public class TesteAction extends Action{
                
                 // coloca aqui ou no teu método especifico... só um exemplo
                 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

                     List<TesteItens> listaItens = new ArrayList<TesteItens>();
                     
                     TesteItens um = new TesteItens();
                     um.setDescItem("lala");

                     TesteItens dois = new TesteItens();
                     dois.setDescItem("lele");

                     TesteItens tres = new TesteItens();
                     tres.setDescItem("lili");
 
                     TesteItens quatro = new TesteItens();
                     quatro.setDescItem("lolo"); 

                     TesteItens cinco = new TesteItens();
                     cinco.setDescItem("lulu");
                   
                     listaItens.add(um);
                     listaItens.add(dois);
                     listaItens.add(tres);
                     listaItens.add(quatro);
                     listaItens.add(cinco);

                     request.setAtributte("listaItens", listaItens);
                 
                     return mapping.findForward("tuaPagina");
                 }
  }

Na tua JSP por exemplo:

<html:select property="itensTeste">
     <html:options collection="listaItens" property="descItem"/>
</html:select>

Não sei se seria essa lista que tu queria preencher… a da JSP.

A

E ae joca_java,

Acho que não consegui me expressar corretamente.
Bem, imagine que eu tenha um formulário, e que ele possa ter N campos. Cada campo desse será um objeto criado (TesteItens). Então o quero fazer, é passar o valor de cada campo para o meu objeto TesteItens (preencher o atributo descItem).
Resumindo, quero obter esta lista vinda de uma interface HTML para que possa ser persistida no banco de dados.

public class MinhaAction extends Action
  {
      public ActionForward execute(ActionMapping mapping,
                                                 ActionForm form, 
                                                 HttpServletRequest request, 
                                                 HttpServletResponse response) throws Exception
      {

      		Teste teste = ((TesteForm) form).getTeste();

                // Após a linha de código acima,  queria obter minha lista de itens 
               // preenchida no meu objeto 'Teste' . . .
      }
 }

Não sei se agora ficou claro. Sei que poderia fazer de outras maneiras, mas essa maneira parece
ser a mais correta, é claro, se for possível.

Obrigado pela atenção.

joca_java
Rapaz… acho que não pode não… tu teria que colocar cada propriedade que tu quer armazenar, no teu form, pegar esse form com o cast

TesteForm testeForm = (TesteForm) form;

Teste teste = new Teste();

teste.setAlgumaCoisa(testeForm.getAlumaCoisa());

Da forma como você falou creio que não funcione.

A

Bem, vou dar mais uma pesquisada, pra garantir mesmo. Caramba, se desse pra fazer isso, seria uam mão na roda ehhehehe …

Mas blz, valeu pela força.

Criado 18 de setembro de 2007
Ultima resposta 18 de set. de 2007
Respostas 6
Participantes 2