Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

RedirectView conflitando com validador da página

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";
    }
}
1 resposta
solução!

Bom dia, olhando melhor, achei uma maneira com ajax que eu não tinha usado da aula anterior que só ele já resolveu minha vida.