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> </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> </td>
<td> </td>
</tr>
<c:forEach items="${vendaList}" var="orcamento">
<tr class="BMWEB">
<td height="17" class="BMWEB style29"> </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> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</c:forEach>
<tr>
<td> </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> </td>
<td> </td>
<td> </td>
<td> </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…