Saudações galera, espero que alguem consiga me ajudar. Ainda engatinhando no vRaptor, acredito que preciso de um interceptor para verificar um valor inválido para um enum, e nesse caso atribuir um “valor null” para ele no objeto instanciado.
Explicando melhor. Eu envio os valores do enum através do result e faço uma interação no JSP para montar um . Ocorre que preciso ter uma opção para a busca em todas as categorias. O problema é quando o valor Todas é selecionado, pois isso gera um NullPointerException, já que não é possível converter este valor para um valor válido no enum.
Nas telas de inclusão e alteração dos documentos não há problemas, tudo funciona perfeitamente, sinal de que o enum está sendo corretamente preenchido.
no controller eu envio assim:
@Get @Path("/pesquisar")
public void formulario(){
result.include("categorias",Categoria.values());
}
O enum é este:
package br.jus.tjac.legis.model;
public enum Categoria {
ATA("Ata"),
BOLETIM_CORREGEDORIA("Boletim da Corregedoria"),
BOLETIM_TJAC("Boletim do Tribunal de Justiça"),
NOTA_TECNICA("Notas técnicas"),
PORTARIA_PRESIDENCIA("Portarias da Presidência"),
PORTARIA_COMISSAO("Portarias da Comissão"),
RESOLUCAO("Resoluções");
private String descricao;
Categoria(String descricao){
this.descricao=descricao;
}
public String getDescricao(){
return this.descricao;
}
}
Este é o form com a opção ALL, antes de iterar sobre a coleção de valores:
<form id="formConsulta" method="POST" action="<c:url value="/pesquisar"/>">
<label for="conteudo">Selecione a palavra-chave referente ao Ato</label>
<input name="publicacao.conteudo" id="conteudo" type="text" value="Palavras-chave" />
<label for="categoria">Selecione a categoria do Ato</label>
<select name="publicacao.categoria">
<option value="ALL">Todas</option>
<c:forEach var="categoria" items="${categorias}" varStatus="status">
<option value="${status.index}">${categoria.descricao}</option>
</c:forEach>
</select>
<button type="submit" id="consultar">Consultar</button>
</form>
recebo os dados:
@Post @Path("/pesquisar")
public List<Publicacao> busca(Publicacao publicacao){
List<Publicacao> resultado=dao.getExemplo(publicacao);
result.include("total",resultado.size());
return resultado;
}
no dao a pesquisa:
public List<Publicacao> getExemplo(Publicacao publicacao){
Example exemplo = Example.create(publicacao)
.enableLike(MatchMode.ANYWHERE)
.ignoreCase();
List<Publicacao> resultado =(List)session.createCriteria(Publicacao.class).add(exemplo).list();
return resultado;
}
Gostaria de saber como faço para que quando o usuário escolher a opção todas, este enum seja setado com valor “em branco”.
Abraço a todos.