Dúvida com Action V-Raptor

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?

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

Então, não tenho nenhum javascript pra isso. Terei que chamar o método adiciona do meu controller via javascript??

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

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:

[code]…

  Cod Orçamento:
	<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>
...[/code] Controller: [code]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(){

}

}
[/code]
DAO:

[code]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();
}
}[/code]

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…