Não só no LoginComponent, mas em muitas outras situações você pode precisar adicionar uma mensagem de erro para ser exibida na camada de apresentação.
Como estou vindo do Struts, minha dúvida é o seguinte: Ou você se preocupa com o acoplamento ou você não se preocupa com o acoplamento.
Evitando a burocracia, como você falou, eu poderia estender ActionSupport e sair fazendo tudo (acessar DAO, etc) dentro da minha action. Como eu estou estendendo ActionSupport, o Struts já vai me fornecer diversos métodos para fazer as coisas do framework. Mas isso me parece muito intrusivo, por isso eu sempre tive o costume de usar o esquema de action -> modelo, isto é, eu separo minha requisição em dois passos (duas classes) action e modelo (facade).
Fiquei agora com essa dúvida conceitual. Qual a vantagem do VRaptor se a minha action vai ficar atrelada da mesma maneira que ela fica com o Struts?
Editado:
Outra dúvida: Como estou vindo do struts, estou acostumado a retornar um resultado para indicar para que página eu quero ir. Vi que o VRaptor também suporta isso. O meu problema é que retornar uma String do modelo de dados é sem-sentido. Isso é coisa de action e não de modelo de dados, concorda? Estou com um caso trivial, um método loadUser que recebe um id. Se o usuário não existir no banco de dados, deve ser adicionado uma mensagem de erro e jogar o cara para uma página especial, ou seja, eu TENHO que retornar outro resultado. Mas ficar returnando “ok” e "error"do meu modelo de negócios me parece muito esquisito.
O que vocês recomendam para contorar esse problema? Será que o modelo sem action é possível ou vamos sempre acabar misturando tudo numa classe só como parece que o VRaptor faz…
Editado:
Outra dúvida: Vi que para a validação o VRaptor procura automaticamente por validateXXXX para validar o método XXXX. Isso é legal, mas porque nao implementar uma interface para fazer isso, assim como o Struts2 tem o Validatable? Se já estou acoplado ao objeto ValidationErrors, qual seria o mal de fazer minha action implementar uma interface. Eu prefiro interface porque o código fica mais sólido. Sem interface, se você erra a definicao do método nao funciona.
O que vocês acham de uma action do VRaptor implementar uma interface? Isso tem alguma desvantagem?