Pessoal, estou com um probleminha…
Estou criando uma pagina (JSF) de um cadastro simples.
Está tudo funcionando, após inserir o dado na tabela, é direcionado a uma outra página dizendo que o cadastro ocorreu com sucesso…
Nessa página há um botão de voltar, porém, quando ele volta na página inicial do cadastro, vem com todos os campos preenchidos com os dados cadastrados :S
Ja tentei de várias maneiras, mas não consiguir limpar os campos…
Sou novo nessa área, estou começando agora e gostaria da ajuda de vocês…
Desde já obrigado…
Se vc quer que sempre ao carregar a pagina ou voltar os campos estejam em branco vc pode utilizar um codigo como esse:
<script>
function limpa() {
if(document.getElementById('campo').value!="") {
document.getElementById('campo').value="";
document.getElementById('campo2').value="";
document.getElementById('campo3').value="";
}
}
</script>
Mas no caso, onde eu colocaria esse script?
Supondo, quero limpar esse campo:
<font><b>Nome</b></font>
<h:inputText maxlength="11" value="#{cadastro.nome}"/>
???
Colocando ele no final da pagina ele sera lido sempre que ela for carregada, coloca apenas o conteudo da função
<script>
document.getElementById('campo').value="";
</script>
<font><b>Nome</b></font>
<h:inputText id="nome" maxlength="11" value="#{cadastro.nome}"/>
//ai no final da página
<script>
document.getElementById(nome).value="";
</script>
Porém, quando atualizo a página ele não apaga :S
Vc disse que está usando JSF correto ? Então faça a limpeza em seu ManagedBean.
Sua JSP:<h:commandButton action="#{seuManagedBean.voltarTela}" />
Seu MB:public String voltarTela() {
resetForm();
return getNavigationRuleInit();
}
protected void resetForm() {
campo1 = "";
campo2 = "";
}
Entendi em partes a lógica…
Porém, como vou colocar essa ação no botão inserir? sendo que ele ja tem a ação #{cadastro.inserir}
?
Usar o javascript não é uma boa idéia não …
Além de limpar o campo no MB pode também verificar seu escopo.
Um escopo de request não dura até a próxima requisição, o que provavelmente é o que você precisa !
Pode tentar colocar as ações de limpar no fim do método de inserção !
Obrigado a todos, resolvi o problema limpando os campo no método de inserir…
Acredito não ser o melhor método, ou o mais certo, mas vou continuar pesquisando…
Vlw
[quote=Thiago Siqueira]Obrigado a todos, resolvi o problema limpando os campo no método de inserir…
Acredito não ser o melhor método, ou o mais certo, mas vou continuar pesquisando…
Vlw[/quote]
De uma olhada em padroes de projeto aí vc encontrará uma boa solução!
[quote=Thiago Siqueira]Entendi em partes a lógica…
Porém, como vou colocar essa ação no botão inserir? sendo que ele ja tem a ação #{cadastro.inserir}
?[/quote]
Vc disse antes que “depois” de inserido no BD, vc clicava em um botão voltar.
O que fiz foi propor uma implementação para esse botão.
[quote=aluisiodsv]Além de limpar o campo no MB pode também verificar seu escopo.
Um escopo de request não dura até a próxima requisição, o que provavelmente é o que você precisa ![/quote]
Eu uso session e realizo a manutenção do lifeCycle de meus dados transitórios.
[quote=Thiago Siqueira]Obrigado a todos, resolvi o problema limpando os campo no método de inserir…
Acredito não ser o melhor método, ou o mais certo, mas vou continuar pesquisando…
Vlw[/quote]
Não é a opção correta, pois se ocorrer algum erro na inserção no BD vc perde os dados transitórios.
Ratificando, amadureça o exemplo didático do resetForm() e implemente um lifeCycle próprio para controle de seus dados transitórios.
A chamada ao método resetForm() deve ser obrigatória na inicialização da tela, logo, fluxos para “Limpar” e “Voltar” realizam essa chamada.