Olá!
Li sobre Http methods com vraptor http://vraptor.caelum.com.br/documentacao/resources-rest/ , mas fiquei em dúvida, como identificar o tipo de metódo q esta chamando meu controller.
tenho o metódo:
@Get
@Post
@Path("/confirmacao")
public void confirmacao(){
}
e eu gostaria de tratar diferentemente as solicitações, algo do tipo:
@Get
@Post
@Path("/confirmacao")
public void confirmacao(){
if(webMethod().equals("post)){
tratar post;
}else{
tratar get;
}
alguém tem alguma idéia??
att,
O mais elegante é você ter métodos distintos para GET e POST.
Seu codigo ficaria assim:
[code]@Get @Path ("/confirmacao")
public void confirmacaoGet(){
// faz alguma coisa
}
@Post @Path ("/confirmacao")
public void confirmacaoPost(){
// faz outra coisa
}[/code]
opa garcia-jj,
obrigado deu 100% certo aqui!
só mais uma dúvida, supondo q a chamada seja feita via POST, eu consigo resgatar valores desse request?
por exemplo com servlets seria algo do tipo:
HttpServletRequest request;
request.getAttributeNames();
Obrigado!
att,
essa página explica:
http://vraptor.caelum.com.br/documentacao/resources-rest/
na seção “Parâmetros dos métodos”
se vc vai passar parâmetros simples, dá pra receber direto. Por exemplo o parâmetro teste=abc
public void logica(String teste) {
}
Super Lucas!
valeu!
eu pulei com 100% de precisão a seção “Parâmetros dos métodos”.
…agora complicou um pouco.
eu preciso receber quase 30 parâmetros, p/ instanciar 1 Objeto.
Eu tenho os gets e sets normal desse Objeto, os atributos tem o mesmo nome dos parâmetros e o envio desse post é realizado por um outro sistema.
Desculpa a falta de conhecimento, mas se eu fizer isso
public void logica(Objeto objeto) {
objeto.getNome();
}
será q magicamente ele seria instanciado com os valores dos parâmetros???
Muito Obrigado!
att,
sim, se tiver os getters e setters apropriados, o objeto vem populado magicamente com os valores que vc passou
SHOW DE BOLA!!!
melhor do q isso só se já estivesse tudo programado hehehe
Muito obrigado Lucas!(de novo! rs)
Obrigado também pela ajuda garcia-jj!
att,
j0nny
Fevereiro 14, 2011, 2:30pm
#8
É essa duvida que eu tenho, se eu tiver um cadastro de clientes, por exemplo, tenho que ter um método
@Post
@Path("/cliente/novo")
public void novo(Cliente c) {}
ou
@Post
@Path("/cliente/novo")
public void novo(String nome, String endereco, /*outros parametros*/) {}
?
Caso eu preciso apenas do objeto Cliente, como eu faria com jQuery, por exemplo?
Passaria os parametros nome e endereco na função
$.post(url, {nome, endereco});
?
no caso de novo(Cliente c) vc faria:
$.post(url, {'c.nome': nome, 'c.endereco': endereco});
desde que existam os setters respectivos.
Uma duvida!
não consigo passar o parametro para meu metodo através da url
e no meu metodo esta assim
@Post
@Path(value="/download")
public InputStreamDownload download(XmlNfePojoImpl xmlSt) {...}
o problema maior é que não consigo acessar os parametros?
vc precisa dar um nome pro parâmetro, de acordo com o parametro do método… algo do tipo:
..../download?xmlSt.numNfe=${xml.numNfe}
de um dos sites que pesquisei achei esse trecho de código
porem assim ou da forma que sitei anterior ele nem mesmo entra no método
é como se ele não entendesse o parametro
dentro do metodo no meu controller os parametros ficam vazios não consigo recuperar o valor dentro do controller
esse é meu unico problema.
nas mesma tela eu tenho um formulário
e os campos do formulário eu consigo enviar para o controller porém o parametro do método não consigo enviar nem da forma que esta na documentação do VRaptor e nem das formas que citei aqui no forum
se alguem puder me ajudar agradeço muito .
vamos lá:
@Post
@Path(value="/download")
public InputStreamDownload download(XmlNfePojoImpl xmlSt) {...}
o cara tá como @Post , então ele não vai funcionar num link. Vc precisa mudar pra @Get .
pra ele aceitar o parâmetro xmlSt.numNfe, a classe XmlNfePojoImpl precisa ter o método setNumNfe(…)
Infelizmente seguindo as recomendações os valores dentro do controller estão vazios
deixa perguntar é necessário criar uma classe XMLLogic por exemplo contendo apenas esse objeto ou uma Interceptor só para tratar isso?
o parâmetro do método download (xmlSt) tá vindo null?
o método tá como @Get ? o método é invocado?
sim para as tres perguntas
@Path("/download")
@Get
public InputStreamDownload download(XmlNfePojoImpl xmlSt) {
String numeroNota = xmlSt.getNumNfe() // aqui ele é nulo
}
e na pagina ele esta assim
[code] <display:table cellspacing=“0” cellpadding=“0"
name=”${usuarioSession.lista}" id=“xmlSt” class=“food_planner”>
<display:column property="chaveNfe" title="Chave da Nota" />
<display:column property="numNfe" title="Numero Nota Fiscal" />
<display:column property="cnpjCliente" title="Cnpj" />
<display:column title="Download" ><a class="btn-nfe" href="${pageContext.request.contextPath}/download?xmlSt.numNfe=${xmlSt.numNfe}">Baixar NFe</a></display:column>
</display:table> [/code]
faz o seguinte… com o browser aberto nessa página, abra o código fonte dela e veja qual é a url que ele está colocando no <a class=“btn-nfe”…
está com o numNfe preenchido?
de novo: XmlNfePojoImpl tem o método setNumNfe()?
sim possui,
é um pojo padrão com getters e setters comuns
não é?
blz, e o código fonte da página no browser, como tá?