Dúvida com Action V-Raptor

5 respostas
C

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:

<label> <div align="center"> <input name="Id_Enviar" type="submit" class="BMWEB" id="Id_Enviar" value="Enviar" onclick="adiciona()" /> </div> </label>
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?

5 Respostas

thiagotn

Como está o código javascript do seu método adiciona() ?

C

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:

<form action="/<nome do contexto>/venda/adiciona">
     inputs...
     aquele botao...
</form>

não precisa do onclick… isso é pra fazer coisas com javascript, não é o caso

C

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.

JSP:
...
<body bgcolor="#000000">
<form method="post" action="">
<tr>
		<td height="21">&nbsp;</td>
		<td class="BMWEB style22 style30">Cod Orçamento:</td>
		<td>
		<div align="left"><input name="venda.cod_orcamento" type="text"
			class="BMWEB" id="cod_orcamento" value="${venda.cod_orcamento}" /></div>
		</td>

		<td>&nbsp;</td>
		<td><label> <input name="Id_Carregar_Orcamento"
			type="submit" class="BMWEB" id="Id_Carregar_Orcamento"
			value="Carregar Orçamento" onclick="buscaOrcamento" />
		</label></td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
	</tr>
       <c:forEach items="${vendaList}" var="orcamento">
		<tr class="BMWEB">
			<td height="17" class="BMWEB style29">&nbsp;</td>
			<td><span class="style30 style36">Data Orçamento:</span></td>
			<td>
			<div align="left"><input name="venda.data_orcamento"
				type="text" class="BMWEB" id="data_orcamento"
				value="${venda.data_orcamento}" /></div>
			</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
	</c:forEach>
      <tr>
		<td>&nbsp;</td>
		<td><label>
		<div align="center"><input name="Id_Enviar" type="submit"
			class="BMWEB" id="Id_Enviar" value="Enviar" onclick="adiciona()" />
		</div>
		</label></td>
		<td><label> <input name="Id_Pesquisar_Orcamento"
			type="submit" class="BMWEB" id="Id_Pesquisar_Orcamento"
			value="Pesquisar Orçamentos" /> </label></td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
	</tr>
</form>
...
Controller:
package br.bmweb.controller;

import java.util.List;

import br.bmweb.bean.Orcamento;
import br.bmweb.bean.Venda;
import br.bmweb.dao.VendaDao;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.caelum.vraptor.view.Results;

@Resource
public class VendaController {
	VendaDao dao = new VendaDao();
	private final Result result;
	private final Validator validator; 
	public VendaController(VendaDao dao,Result result, Validator validator){
		this.dao=dao;
		this.result=result;
		this.validator=validator;
	}

	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);
	}
	
	public List<Orcamento> buscaOrcamento(int cod_orcamento){
		return dao.busca(cod_orcamento);
	}
	
	public void manterVenda(){

	}
}
DAO:
package br.bmweb.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.bmweb.bean.Orcamento;
import br.bmweb.bean.Venda;
import br.bmweb.util.AbreSession;
import br.com.caelum.vraptor.ioc.Component;

@Component
public class VendaDao {
      public void gravar(Venda venda){
		Session session = new AbreSession().getSession();
		Transaction tx = session.beginTransaction();
		session.save(venda);
		tx.commit();
		session.close();
	}
}
Lucas_Cavalcanti

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…
Criado 26 de abril de 2010
Ultima resposta 27 de abr. de 2010
Respostas 5
Participantes 3