Em um exemplo pessoal de pagina similar ao de autor, coloquei uma validador de f:validateLongRange e no button "gravar" fiz igual encontra-se no treinamento em relação ao RedirectView (classe criada para no capítulo 7) porém ele não conclui pois sempre chama o validador da página. Removi a instanciação da classe para limpar os campos mas não funcionou. Se eu removo o validadores da página ele não apresenta erro algum. Mas com isso poderá mandar coisa nula. Pensei em fazer a validação no Bean mas não sei se nesse caso seria o mais correto. Teriam algum exemplo para isso? Tentei até colocando o immediate="true" mas gravou null no banco.
<h:body>
<h1>Nova Categoria de Ativo</h1>
<h:form>
<h:messages/>
<fieldset>
<legend>Dados da Categoria</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Nome" for="nome" />
<h:inputText id="nome" value="#{categoriaAtivoBean.categoriaAtivo.nome}"
required="true" requiredMessage="Nome Obrigatorio"
validatorMessage="Máximo 25 Caracteres">
<f:validateLongRange maximum="25"/>
</h:inputText>
<h:outputLabel value="Descrição" for="descricao" />
<h:inputText id="descricao" value="#{categoriaAtivoBean.categoriaAtivo.descricao}"
required="true" requiredMessage="Descrição Obrigatorio"/>
<h:commandButton value="Gravar" action="#{categoriaAtivoBean.gravar}"/>
</h:panelGrid>
</fieldset>
</h:form>
</h:body>
public RedirectView gravar() {
System.out.println("Gravando categoria!" + this.categoriaAtivo.getNome());
new DAO<CategoriaAtivo>(CategoriaAtivo.class).adiciona(this.categoriaAtivo);
//Tentei com e sem a instancia do objeto.
this.categoriaAtivo = new CategoriaAtivo();
return new RedirectView("ativo");
}
package br.com.financas.web.util;
public class RedirectView {
private String viewName;
public RedirectView(String viewName) {
this.viewName = viewName;
}
@Override
public String toString() {
return viewName + "?faces-redirect=true";
}
}