Boa noite Gujeiros, estou com um dúvida bem “besta” no V-Raptor mas que não encontrei resposta, tenho um formulário com dois botões, cada um executa uma Action mas não estou conseguindo chamá-la através do evento onclick do botão. No meu formulário tenho o trecho abaixo que deveria chamar o método adiciona do meu Controller:
public void adiciona(Venda venda){
if (venda.getTipo_venda() == "") {
validator.add(new ValidationMessage("Tipo da Venda precisa ser preenchido!", "venda.tipo_venda"));
}
validator.onErrorUse(Results.page()).of(VendaController.class).manterVenda();
dao.gravar(venda);
}
Alguém já passou por isso?
Como está o código javascript do seu método adiciona() ?
C
cristianogro
Então, não tenho nenhum javascript pra isso. Terei que chamar o método adiciona do meu controller via javascript??
Lucas_Cavalcanti
não…
esse seu botão tá dentro de um form, certo?
como seu controller se chama VendaController vc vai fazer um form assim:
<formaction="/<nome do contexto>/venda/adiciona">inputs...
aquelebotao...
</form>
não precisa do onclick… isso é pra fazer coisas com javascript, não é o caso
C
cristianogro
Usando a tag form funciona perfeitamente o que ocorre é que nesse JSP tenho um campo onde o usuário digita o código do orçamento e clica no botão "Carregar Orçamento", ao clicar nesse botão outros campos do JSP são preenchidos com os dados retornados. O usuário preenche o restante dos dados do formulário e clica no botão "Enviar" que vai salvar tudo no banco. Em resumo o botão "Carregar Orçamento" executa o método buscarOrcamento() e o botão "Enviar" executa o método adiciona(). Não sei se é possível fazer desta forma que descrevi.
packagebr.bmweb.controller;importjava.util.List;importbr.bmweb.bean.Orcamento;importbr.bmweb.bean.Venda;importbr.bmweb.dao.VendaDao;importbr.com.caelum.vraptor.Path;importbr.com.caelum.vraptor.Resource;importbr.com.caelum.vraptor.Result;importbr.com.caelum.vraptor.Validator;importbr.com.caelum.vraptor.validator.ValidationMessage;importbr.com.caelum.vraptor.view.Results;@ResourcepublicclassVendaController{VendaDaodao=newVendaDao();privatefinalResultresult;privatefinalValidatorvalidator;publicVendaController(VendaDaodao,Resultresult,Validatorvalidator){this.dao=dao;this.result=result;this.validator=validator;}publicvoidadiciona(Vendavenda){if(venda.getTipo_venda()==""){validator.add(newValidationMessage("Tipo da Venda precisa ser preenchido!","venda.tipo_venda"));}validator.onErrorUse(Results.page()).of(VendaController.class).manterVenda();dao.gravar(venda);}publicList<Orcamento>buscaOrcamento(intcod_orcamento){returndao.busca(cod_orcamento);}publicvoidmanterVenda(){}}
só pra ficar claro: isso não é JSF, é JSP… você não consegue chamar métodos a partir do JSP, vc consegue fazer requisições…
vc pode fazer isso que vc tah querendo (o carregar orçamento) mas vc tem 2 opções: ou vc carrega o formulário usando javascript+ajax, ou vc faz uma requisição que volta pra mesma página, com os dados preenchidos…
ou seja, na 2a forma vc precisa de:
uma lógica pra mostrar esse seu formulário, só com a parte de cima visível…
ao clicar no carregar orçamento ele vai pra lógica de orçamento (form action="//venda/buscaOrcamento"), e redireciona pra mesma página do formulário, só que com os dados de baixo preenchidos
-os dados de baixo estarão dentro de um form que aponta pra //venda/adiciona e o botão submit vai ser só um botão submit, sem onclick…