Um trabalho comum na vida do programador é preencher caixas de seleção com valores possíveis.
Use o conceito da fábrica para resolver esse problema.
Vamos escrever uma classe que é responsável por criar valores que são usados na aplicação web.
package org.vraptor.example.factory; public class Factory { private enum Sizes{MIN,MEDIUM,BIG,HUGE}; public Sizes[] getSizes() { return Sizes.values(); } }
Aqui nós usamos uma enumeração e devolvemos os valores dela. Normalmente uma fábrica teria muito mais métodos.
O interceptador vai criar a fábrica e ejetar ela ao escopo da requisição.
package org.vraptor.example.factory; public class FactoryInterceptor implements Interceptor { @Out private Factory factory; public void intercept(LogicFlow flow) throws LogicException, ViewException { this.factory = new Factory(); flow.execute(); } }
Você também poderia passar no construtor da fábrica uma conexão ou hibernate session para acessar o banco de dados.
Nessa lógica implementa o interceptador FactoryInterceptor. Isso garante que a fábrica será criada e ejetada ao request.
@Component @InterceptedBy(FactoryInterceptor.class) public class PersonLogic { public void add() { System.out.println("do something"); } }
Se você acessar person.add.logic, você será direcionado á página person/add.ok.jsp.
O jsp final poderia ser:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> Size: <select name="size"> <c:forEach items="${factory.sizes}" var="size"> <option name="${size}">${size}</option> </c:forEach> </select> </html>