7. @Component
public class PropostaDAO {
...
}
@Resource
public class PropostaController {
private PropostaDAO dao;
public PropostaController(PropostaDAO dao) {
this.dao = dao;
}
public List<Proposta> listagem() {
return new ArrayList<Proposta>();
}
}
8. <form action="${pageContext.request.contextPath}/proposta/adicionar">
Descrição: <input type="text" name=“proposta.descricao" /><br/>
Preço: <input type="text" name=“proposta.preco" /><br/>
<input type="submit" value="Salvar" />
</form>
@Resource
public class PropostaController {
private PropostaDAO dao;
private Result result;
public PropostaController(PropostaDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
public void adicionar(Proposta proposta) {
dao.salvar(proposta);
result.redirectTo(PropostaController.class).listagem();
}
}
9. @Resource
public class PropostaController {
private Validator validator;
public PropostaController(Validator validator) {
this.validator = validator;
}
}
public void void adicionar(Proposta proposta) {
if (proposta.getDescricao().isEmpty()) {
validator.add(new ValidationMessage(“descricao.nao.informada", "erro"));
}
validator.onErrorUsePageOf(PropostaController.class).listagem();
dao.salvar(proposta);
result.redirectTo(PropostaController.class).listagem();
}
public void void adicionar(final Proposta proposta) {
validator.checking(new Validations() {{
that(!proposta.getDescricao().isEmpty(), "erro", " descricao.nao.informada");
}});
validator.onErrorUsePageOf(PropostaController.class).listagem();
dao.salvar(proposta);
result.redirectTo(PropostaController.class).listagem();
}
10. • Validação com mensagens parametrizadas
• Validação com Matchers do Hamcrest
• Validação com Bean Validation e Hibernate Validator
• Validação com suporte a Internacionalização
<ul>
<c:forEach items="${errors}" var=“error">
<li> ${error.category} - ${error.message} </li>
</c:forEach>
</ul>
11. @Convert(Estado.class)
public class EstadoConverter implements Converter<Estado> {
public Estado convert(String value, Class<? extends Estado> type,
ResourceBundle bundle) {
if (value == null || value.equals("")) {
return null;
}
Estado estado = new Estado();
try {
estado.setId(Long.parseLong(value));
} catch (NumberFormatException e) {
estado = null;
}
return estado;
}
}
12. @Intercepts
public class LoginInterceptor implements Interceptor {
private Result result;
private UserSession userSession;
public LoginInterceptor(Result result, UserSession userSession) {
this.result = result;
this.userSession = userSession;
}
public boolean accepts(ResourceMethod method) {
return true;
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resource) {
if (userSession.isLogged()) {
stack.next(method, resource);
} else {
result.redirectTo(LoginController.class).login();
}
}