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>