Camada de apresentação

Esse página explica como o VRaptor interage com a camada de apresentação e como ele facilita o uso de engines de apresentação como JSP, Velocity e Freemaker.

Outjection: ejetando objetos

Para colocar objetos num escopo nós os ejetamos.

VRaptor consegue ejetar objetos no escopo da lógica, requisição(padrão), sessão e aplicação.

O escopo da lógica é similar do PageScope na especificação JSP e Servlet. Requisição e sessão são exatamente o que nome significa. Também veja ScopeType.

Exemplo de procura

Vamos procurar um usuário e ejetar o resultado ao escopo da requisição:

@Component("users")
public class LoginLogic {

        private List<User> users;
        
        private String name;

        // alias o método para "search"
        @Logic("search")
        public void searchUsers(String name) {
                // dao esquisito, mas só um exemplo
                this.users = new UserDao().searchByName(name);
        }
        
        public List<User> getUsers() {
                return this.users.
        }
}

Usamos o getter getUsers() para ejetar o atributo users ao escopo da requisição.

No exemplo acima, a linha seguinte é executada:

request.setAttribute("users", users);

@Out

Você também pode usar a anotação @Out para ejetar objetos.

@Out
private List<User> users;

Isso ejeta o atributo users ao escopo da requisição.

Escopo

Se quiser alterar o escopo, use:

@Out(scope=ScopeType.SESSION)
private List<User> users;

Ejetamos o atributo users ao escopo da sessão.

Key

Use:

@Out(scope=ScopeType.SESSION, key="USERS")
private List<User> users;

se quiser ejetar o atributo users ao session scope com a chave USERS.

No exemplo acima, a linha seguinte é executada:

session.setAttribute("USERS", users);

JSP: Como usar a variável ejetada

Supondo que nós usamos a chave USERS e usando o método toString pelo EL:

<html>
        Aqui é a lista.toString: ${USERS}...
        Se quisesse, poderia usar forEach com a coleção ...
</html>