Estou com o seguinte problema: tenho um formulario jsp normal para um cadastro simples (idCidade, descricao) e gostaria, utilizando o struts2, que o meu action já carregasse automaticamente os valores dos atributos do meu entityBean Cidade, que possui os campos idCidade e descricao.
No action eu criei um atributo Cidade cidade e no jsp o “name” dos textbox está “cidade.idCidade” e “cidade.descricao”.
Contudo, o atributo cidade no action sempre fica null.
Cara, vc já verificou se existem métodos getters e setters para o seu atribudo cidade na sua Action? Lembrando que tem que ser o nome exato do seu atributo após o get/set, senão não funciona.
Cansei de apanhar com problemas semelhantes ao seu, e quase sempre o nome do atributo tava errado ou eu esquecia de colocar getters e setters pra ele
Caso o problema não seja os getters e setters, extenda a classe ActionSupport sobrescreva o método execute e ponha nele a logica para carregar o bean cidade ou coloque a logica no proprio get, dependendo da sua necessidade.
Bom galera, concordo com vcs em gênero, número e grau.
Contudo eu já verifiquei tudo isso que vcs passaram…
Vou tentar explicar melhor:
Tenho um entitybean chamdo Cidade. Nele tenho 2 atributos: idCidade e descrição e seus respectivos métodos get/set.
Tenho um controller chamdo CidadeController onde tenho o método de salvarCidade. Nessa classe eu tenho um atributo cidade do tipo Cidade e seus métodos get/set.
O meu jsp não utiliza as tags do struts2. Eu fiz um jsp utilizando html puro, com
,
e
. No jsp, tenho 2 campos: textbox name=“cidade.idCidade” e outro textbox name=“cidade.descricao”. O action do formulário está assim: action=“Cidade!salvarCidade”.
O meu web.xml está configurando “Cidade” para a classe CidadeController. Nesse caso está funcionando direitinho. Quando clico no submit do formulário, a requisição vai corretamente para o método salvarCidade da classe CidadeController.
Eu disconfio que o problema está acontecendo pq eu não estou usando as tags do struts2 no jsp. Pois fiz um outro formulário simples utilizando as tags do struts2 (<s:textfield … />) e funcionou perfeitamente. Visualizei o código gerado, e percebi que o struts2 monta um formulário diferente do que foi digitado no jsp. Pode ser que tenha alguma tag ou configuração que especifique exatamente o que o controller ou a action deve fazer.
O que eu quero saber é se eu posso utilizar uma página html simples para fazer com que o struts2 carregue automaticamente os campos do formulário para o entitybean.
Acho que deve ter um jeito de configurar isso, pois não acredito que eu tenha que utilizar exatamente as especificações do framework, o que dificultaria a implementação do struts2 em sistemas já existentes.
[quote=rnicolletti]Bom galera, concordo com vcs em gênero, número e grau.
Contudo eu já verifiquei tudo isso que vcs passaram…
Vou tentar explicar melhor:
Tenho um entitybean chamdo Cidade. Nele tenho 2 atributos: idCidade e descrição e seus respectivos métodos get/set.
Tenho um controller chamdo CidadeController onde tenho o método de salvarCidade. Nessa classe eu tenho um atributo cidade do tipo Cidade e seus métodos get/set.
O meu jsp não utiliza as tags do struts2. Eu fiz um jsp utilizando html puro, com
,
e
. No jsp, tenho 2 campos: textbox name=“cidade.idCidade” e outro textbox name=“cidade.descricao”. O action do formulário está assim: action=“Cidade!salvarCidade”.
O meu web.xml está configurando “Cidade” para a classe CidadeController. Nesse caso está funcionando direitinho. Quando clico no submit do formulário, a requisição vai corretamente para o método salvarCidade da classe CidadeController.
Eu disconfio que o problema está acontecendo pq eu não estou usando as tags do struts2 no jsp. Pois fiz um outro formulário simples utilizando as tags do struts2 (<s:textfield … />) e funcionou perfeitamente. Visualizei o código gerado, e percebi que o struts2 monta um formulário diferente do que foi digitado no jsp. Pode ser que tenha alguma tag ou configuração que especifique exatamente o que o controller ou a action deve fazer.
O que eu quero saber é se eu posso utilizar uma página html simples para fazer com que o struts2 carregue automaticamente os campos do formulário para o entitybean.
Acho que deve ter um jeito de configurar isso, pois não acredito que eu tenha que utilizar exatamente as especificações do framework, o que dificultaria a implementação do struts2 em sistemas já existentes.
Obrigado!
[/quote]
Amigo acho que entendi, dá para usar paginas html com struts2 sim. Mas acho que você deve esta quebrando o ciclo de vida de uma aplicação Struts 2, Struts 2 é uma Servlet, Front Controller(Design Pattern - Somente um controlador que delega as responsabilidades), ou seja, tudo que você for fazer em struts 2 tem que passar por essa Servlet. Quando você tenta usar um controlador diferente usando tags do struts 2 provavelmente elas estão procurando uma action struts 2 e para achar essa action tem que passar pela Servlet struts 2.
private Cidade cidade;
private List<Cidade> cidades;
private CidadeDAOImpl cDAO = new CidadeDAOImpl();
private String msg;
public String listarCidades() {
cidades= (List<Cidade>) cDAO.listAll("Cidade", "cidade");
System.out.println("listarCidades");
return "listar";
}
public String salvarCidade() {
System.out.println("cidade="+cidade);
//System.out.println(cidade.getIdCidade());
//System.out.println(cidade.getCidade());
return "msg";
}
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
public List<Cidade> getCidades() {
return comunidades;
}
public void setCidades(List<Cidade> cidades) {
this.cidades= cidades;
}
}[/color]
O meu controller não está fazendo um extends para ActionSupport, mas acredito que não seja o problema, pois quando eu mudo o jsp para utilizar as tags do struts2 tudo funciona perfeitamente. Só não funciona com o jsp acima.
Amigo no struts.xml você mapeia uma classe e a execução de um método nela retorna uma String ou success, ou error, ou input, ou outra qualquer, nesse caso qual método executar na sua Controler cidade? você tem que dizer no struts.xml qual metodo você esta mapeando da classe, com a propriedade method da tag action. Você nomeia esse action com a propriedade name e chama nomeDadoaAction.action com isso o struts chama o metodo mapeado para aquela action.
ou então estender Action suport e implementar execute para que o struts saiba qual metodo executar sempre que chamar o seu controler.
Nunca parei e teste uma action que não estendesse uma action do struts2. Depois eu testo.
Amigo, eu já resolvi esse problema há algum tempo, mas só tive tempo de responder agora…
Realmente as suas colocações são válidas…
Contudo, em testes que efetuei, acabei descobrindo que não há necessidade de mapear um método no struts.xml.
Como estou desenvolvendo em ajax utilizando o framework prototype (www.prototype.org), eu utilizo assim:
Basta mapear o Action ou Controller no arquivo strtus.sml e quando chamo CidadeController!salvarCidade.action, automaticamente o fluxo vai direto para o método salvarCidade.
O problema de recuperar o bean automaticamente ocorria pq eu não havia declarado a variável pars no javascript, pois como estou usando o framework prototype, ele não recupera automaticamente do formulário, é necessário explicitar o que será enviado.
Mas agradeço a atenção e fica mais um aprendizado a todos!
[quote=rnicolletti]Amigo, eu já resolvi esse problema há algum tempo, mas só tive tempo de responder agora…
Realmente as suas colocações são válidas…
Contudo, em testes que efetuei, acabei descobrindo que não há necessidade de mapear um método no struts.xml.
Como estou desenvolvendo em ajax utilizando o framework prototype (www.prototype.org), eu utilizo assim:
Basta mapear o Action ou Controller no arquivo strtus.sml e quando chamo CidadeController!salvarCidade.action, automaticamente o fluxo vai direto para o método salvarCidade.
O problema de recuperar o bean automaticamente ocorria pq eu não havia declarado a variável pars no javascript, pois como estou usando o framework prototype, ele não recupera automaticamente do formulário, é necessário explicitar o que será enviado.
Mas agradeço a atenção e fica mais um aprendizado a todos![/quote]
Caramba, depois de dois anos que vc sobrou tempo pra postar a solução hauahuah, eta menino ocupado… mas ta valendo…