Dúvidas pontuais no Tutorial do vRaptor3

[quote=garcia-jj]
Como o vraptor irá apenas delegar a validação para o BeanValidator, isso dependerá tudo dele. Só que se não me engano quando você inicializa o bean-validator precisa indicar o locale a ser usado. Não sei como o vraptor sabe qual o locale usar internamente, mas podemos fazer uso o atributo javax.servlet.jsp.jstl.fmt.locale para passar o locale para o bean-validator, Lucas?[/quote]

o vraptor já tem um componente que lê (ou deveria ler :P) esse parâmetro… ele se chama Localization, e vc pode usar no seu BeanValidator

PessoALL,
Tem algum jeito no VRaptor3 de Injetar Dependencias (ou Recursos) do FrameWork e/ou de Objetos de minha Aplicação via [color=red]@In[/color] (como no VRaptor2), +/- assim:

[code]
@Resource
public class ProdutosController {
@In
private final Result result;
@In
private Validator validator;
@In
private ProdutoSrvcFcd produtoSrvcFcd;

public void incluir(Produto produto) {
	produtoSrvcFcd.incluir(produto);
}
...

}
[/code] :?:

usa o @Autowired do Spring… mas é feio :wink:

Ficou uma dúvida pendente: http://guj.com.br/posts/list/45/198913.java#1034139

ops :blush:

daria pra fazer uma condicional: se tiver o jar do Hibernate, registra o do Hibernate, se tiver o do JSR303, registra o do 303, se tiver os dois, registra um wrapper pros dois =)

[quote=Lucas Cavalcanti]ops :blush:

daria pra fazer uma condicional: se tiver o jar do Hibernate, registra o do Hibernate, se tiver o do JSR303, registra o do 303, se tiver os dois, registra um wrapper pros dois =)[/quote]

Certo. Agora mais do que nunca vou precisar rever aquele artigo que tu me passou de atualizar meu fork com as últimas alterações do git do vraptor/master :smiley:

Ps: bagunçamos o tópico das dúvidas pontuais.

nada como uma boa divagação de vez em qdo :wink:

qqer dúvida sobre git, só dar um toque

Fiquei com uma dúvida…

Quando usamos o Bean Validator, o resultado dos erros vem em um iterator de ConstraintViolations, objeto esse que contém uma série de informações sobre a validação, e não apenas a mensagem de validação.

Para o resultado creio que deveremos usar o ValidationMessages do Vraptor, correto? Sendo assim o resultado das mensagens de erros devem ser interpoladas via MessageInterpolator.interpolate ou extender o ValidationMessages do Vraptor e devolver um objeto com as informações de validação?

(edit)

Notei que o bean validator, quando dá um erro de validação, mostra apenas as mensagens cruas do tipo “não é um e-mail válido”. Estou em dúvida de como reportar isso para a tela, se como String ou então (penso ser o melhor) devolver um objeto para que o peão possa tratar na tela. Creio que algo extendendo ValidationMessage do vraptor com os dados das constraint violations.

[quote=Lucas Cavalcanti]usa o @Autowired do Spring[/quote]Lucas, Muito Obrigado!! :thumbup: Funfou mesmo!!

[quote=Lucas Cavalcanti]… mas é feio :wink:
[/quote]Concordo contigo, mas só com relação a Injeção de Dependências (Objetos de Layers da minha Aplicação), pois a configuração fica dúbia (seu eu remover @Component, pára de funcionar): duplicidade de Annotations.:thumbdown: Mas, acerca de Injeção de Recurso, seja de APIs do Java (Servlet/HTTP) ou de FrameWork, fica muito + prático c/ a @Autowired (facilita o Refactoring), pois se o desenvolvedor entender q ele não precisa + do Objeto de 1 API, nada q 1 delete (ou Comment-Out dos) Objetos e Optimize Imports não resolva (c/ alguns clicks). 8)

Agora tenho 1 Duvidinha - vou ilustrar o ex.: tendo 1 form.JSP (ou produtos/manter) com Dados do Produto carregados no Fomulário. Tendo 1 Botão ‘Alterar’, como faço para q ele chame o método alterar(); e 1 Botão ‘Excluir’, como fazer ele chamar o método excluir()??! Detalhe: [color=red]não[/color] vale usar [color=darkblue]JavaScript[/color]!

P.S.[quote=garcia-jj]Ps: bagunçamos o tópico das dúvidas pontuais. [/quote]Absolutamente, Garcia! :-o Qq contribuição é sempre bem-vinda!! :thumbup:

[quote=garcia-jj]Fiquei com uma dúvida…

Quando usamos o Bean Validator, o resultado dos erros vem em um iterator de ConstraintViolations, objeto esse que contém uma série de informações sobre a validação, e não apenas a mensagem de validação.

Para o resultado creio que deveremos usar o ValidationMessages do Vraptor, correto? Sendo assim o resultado das mensagens de erros devem ser interpoladas via MessageInterpolator.interpolate ou extender o ValidationMessages do Vraptor e devolver um objeto com as informações de validação?

(edit)

Notei que o bean validator, quando dá um erro de validação, mostra apenas as mensagens cruas do tipo “não é um e-mail válido”. Estou em dúvida de como reportar isso para a tela, se como String ou então (penso ser o melhor) devolver um objeto para que o peão possa tratar na tela. Creio que algo extendendo ValidationMessage do vraptor com os dados das constraint violations.[/quote]

o Hibernate Validator 3 (que o vraptor já suporta) dá um monte de constraintViolations, que têm o campo q deu o erro e a mensagem… daí é só converter pra uma List do VRaptor…
não sei como funciona o Bean Validator/Hibernate Validator 4, mas acho que ele tb tem algo do tipo

[quote=derlon]Concordo contigo, mas só com relação a Injeção de Dependências (Objetos de Layers da minha Aplicação), pois a configuração fica dúbia (seu eu remover @Component, pára de funcionar): duplicidade de Annotations.:thumbdown: Mas, acerca de Injeção de Recurso, seja de APIs do Java (Servlet/HTTP) ou de FrameWork, fica muito + prático c/ a @Autowired (facilita o Refactoring), pois se o desenvolvedor entender q ele não precisa + do Objeto de 1 API, nada q 1 delete (ou Comment-Out dos) Objetos e Optimize Imports não resolva (c/ alguns clicks). 8)
[/quote]
Vc tb consegue fazer isso com injeção no construtor :wink:

[quote=derlon]
Agora tenho 1 Duvidinha - vou ilustrar o ex.: tendo 1 form.JSP (ou produtos/manter) com Dados do Produto carregados no Fomulário. Tendo 1 Botão ‘Alterar’, como faço para q ele chame o método alterar(); e 1 Botão ‘Excluir’, como fazer ele chamar o método excluir()??! Detalhe: [color=red]não[/color] vale usar [color=darkblue]JavaScript[/color]![/quote]
vc pode usar com name=_method e value=(PUT|DELETE|POST)… mas não funciona no IE =(

PessoALL,

JogoRápido: [color=red]não[/color] podemos fazer OverLoad nos métodos de nossa Controller??! :hunf:

só se usar junto com @Path

na verdade trocando o método http tb funciona (@Get @Post @Put @Delete) só não pode overload sem configuração nenhuma

Na Controller qual é o método default??!

Se você não colocar nada em seu método o padrão é ele usar @Get. Caso o Path não esteja declarado será usado nome-do-controller + nome-do-metodo.

(já dei 1 googlada, mas não achei nada)
Codifiquei assim: @Post public void manter() { } @Get public Produto manter(final Produto produto) { return produto; } mas, recebi:
Your logic method must accept HTTP GET method if you want to redirect

Assim não pode?! :?:

Bean validator done. Só não consegui publicar porque hoje o github resolveu a me complicar. Nem mesmo consigo publicar um gist.

[quote=derlon](já dei 1 googlada, mas não achei nada)
Codifiquei assim: @Post public void manter() { } @Get public Produto manter(final Produto produto) { return produto; } mas, recebi:
Your logic method must accept HTTP GET method if you want to redirect

Assim não pode?! :?: [/quote]

Acho que você inverteu as coisas… @Post deve ser no método que você quer fazer o manter, já que ele que recebera o submit. http://vraptor.caelum.com.br/documentacao/resources-rest/

se vc não especificar o método http via anotação ele aceita todos os métodos…

pra fazer redirects o método precisa ser @Get, pq a requisição volta pro browser do cliente e o browser manda uma requisição GET pra url de redirect

use os métodos HTTP do jeito certo (GET pra buscar/visualizar dados, POST pra adicionar, PUT pra adicionar/modificar e DELETE pra remover)