Duvida

10 views
Skip to first unread message

Fabio Ebner

unread,
Apr 19, 2014, 4:59:35 PM4/19/14
to Vraptor
Por favor.

Alguem pode me explicar isso:

Atenção: caso você queira que algum componente esteja disponível na view, é necessário anotar o componente com @Named definindo o nome exposto na JSP. No exemplo abaixo a classe será exposta como user e estará disponível na view.


@Name(name="user")
public void User {}


Não entendi, isso significa que vou conseguir chamar esse metodo na view?

vlw

Otávio Garcia

unread,
Apr 19, 2014, 10:41:15 PM4/19/14
to caelum-...@googlegroups.com
Existem duas formas de disponibilizar um componente para a view.

Quand você tem um objeto, por exemplo, um usuário, você pode incluir ele via result.include("usuario", usuarioQueVeioDoBanco).

Outra forma é usar o @Named do CDI. Neste caso se você tem um objeto que por algum motivo você não quer fazer o include, você pode anotar com @Named. Assim o CDI deixa esse objeto disponível na EL (Expression language). Se você fizer um ${user} na view o CDI vai disponibilizar esse cara.

Mas atenção: o CDI por padrão vai simplesmente fazer um NEW no objeto. Então ele não vale para qualquer objeto, principalmente entidades. Ele vale, por exemplo, se você tem uma classe de serviço que lista dados basicos de combos, você pode então anotar com @Named e chamar coisas assim: ${combos.listarCidades}.

Outra opção, essa bem mais legal, é que você pode criar um producer para disponibilizar coisas. Por exemplo, se você tem um método que lista todas as cidades, você pode fazer algo assim:

@Produces // indica que este método produz coisas
@Named("todasCidades")
public List<Cidade> listarCidades() {
    [...]
}

E no JSP

<c:forEach items="${todasCidades}" var="cidade">
    <li>${cidade.nome} - ${cidade.estado}</li>
</c:forEach>



--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor.
For more options, visit https://groups.google.com/d/optout.

Fabio Ebner

unread,
Apr 20, 2014, 5:53:35 PM4/20/14
to Vraptor
Show de bola.. mas tira uma duvida minha.. tem alguma forma de eu salvar algo na sessao no vraptor e pegar na view?? por exemplo quero deixar os dados do usuario na sessao, eu preciso receber ele na pagina JSP e colocar na sessao?? ou tem como eu colocar na sessao via vraptor e so recuperar la?

vlw

Otávio Garcia

unread,
Apr 20, 2014, 6:47:18 PM4/20/14
to caelum-...@googlegroups.com
Sim. Se o nome do objeto e "bolinha", basta você fazer ${bolinha.getNome()} no JSP.

Fabio Ebner

unread,
Apr 20, 2014, 7:12:20 PM4/20/14
to Vraptor
mas como eu setaria na session com o vraptor? Session.set("param", "valor")?

Tarcisio A.

unread,
Apr 20, 2014, 7:21:58 PM4/20/14
to caelum-...@googlegroups.com
Se eu não estiver errado, anota @SessiomScoped e o @Named e pronto, o próprio helper doe eclipse na hora de editar a página jsp vai por disponível lá, assim como é com o @ManagedBean, é assim que to fazendo

Otávio Garcia

unread,
Apr 20, 2014, 7:29:54 PM4/20/14
to caelum-...@googlegroups.com
Fábio, dá uma olhada na documentação do vraptor, que tem tudo bem explicado.https://github.com/caelum/vraptor4/wiki/04-Componentes#escopos


On Sun, Apr 20, 2014 at 8:21 PM, Tarcisio A. <tarcisio...@gmail.com> wrote:
Se eu não estiver errado, anota @SessiomScoped e o @Named e pronto, o próprio helper doe eclipse na hora de editar a página jsp vai por disponível lá,  assim como é com o @ManagedBean, é assim que to fazendo

Rodrigo Turini

unread,
Apr 21, 2014, 10:30:36 AM4/21/14
to caelum-...@googlegroups.com
Oi Fabio! É basicamente isso que o Tarcisio respondeu, você pode definir um escopo 
de sessão pro objeto, e deixar ele acessivel na jsp usando o @named. Em qualquer 
ponto do seu código você pode injetar esse bean e settar os valores deles, algo como:

# seu componente session scoped

​​
@SessionScoped
@Named
class Componente { private long id; // get e set }

# em algum controller seu

​​
@Controller
class AlgumController {
    @Inject private Componente componente;
    @Get
    public void algumMetodo(){
        componente.setId(8001);
    }
}

# na sua jsp, você pode acessar: ${component.id} .

Sem usar o @named, você poderia no método chamar result.include(componente). []'s

Rodrigo Turini
Caelum | Ensino e Inovação
www.caelum.com.br

Reply all
Reply to author
Forward
0 new messages