Pessoal ,tenho o seguinte command link do JSF
<h:commandLink title="Voltar"
action="#{clienteMB.voltar}"
style="margin-left:20px">
<h:graphicImage url="/imagens/voltar.jpg"
style="border:0"/>
</h:commandLink>
Metodo Voltar do MB
public void voltar() {
System.out.println("entroo");
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
try {
response.sendRedirect("menu.xhtml");
} catch (IOException ex) {
JSFUtil.enviarMenssagemErro("Erro ao voltar");
}
}
OU
public void voltar() {
return "menu.xhtml"
}
Nenhum funciona
quando acionado o commadlink ele da um nullpointer na pagina,ele NÃO ENTRA no metodo voltar…o tomcat nem exibe o erro no console ,alguem sabe o porque?
abaixo tem o codigo fonte inteiro mais melhor entendimento.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Cadastro de Cliente</title>
<script type="text/javascript">
function validarApagar(xhr, status, args){
var isClienteSelecionado = args.isClienteSelecionado;
if(isClienteSelecionado){
dlgExclui.show();
}
}
function validarAlterar(xhr, status, args){
var alterou = args.alterou;
if(alterou) {
dlgCliente.hide();
}
}
</script>
</h:head>
<f:view locale="pt_br">
<h:body>
<h:form>
<p:toolbar>
<p:toolbarGroup align="left">
<p:menuButton value="Cadastro"
rendered="#{menuMB.administrator or menuMB.simples}">
<p:menuitem value="Usuários"
action="#{menuMB.irUsuario}"
ajax="false"
rendered="#{menuMB.administrator}"/>
<p:menuitem value="Clientes"
action="#{menuMB.irCliente}"
ajax="false"
rendered="#{menuMB.administrator or menuMB.simples}"/>
</p:menuButton>
</p:toolbarGroup>
<p:toolbarGroup align="left">
<p:menuButton value="Processo">
<p:menuitem value="Manter Fotos"
action="#{menuMB.irAlbum}"
ajax="false"
rendered="#{menuMB.administrator or menuMB.simples}"/>
<p:menuitem value="Selecionar Fotos"
rendered="#{menuMB.cliente}"
action="#{menuMB.irVisualizacaoAlbum}"
ajax="false"/>
</p:menuButton>
</p:toolbarGroup>
<p:toolbarGroup align="left">
<p:menuButton value="Sair">
<p:menuitem value="Sair"
action="#{menuMB.sair}"
ajax="false"/>
</p:menuButton>
</p:toolbarGroup>
</p:toolbar>
</h:form>
<h:form id="frmGridCliente" >
<p:growl id="menssagensCliente"
life="5000"/>
<p:dataTable id="dtClientes"
widgetVar="dtClientes"
var="cliente"
value="#{clienteMB.clientes}"
paginator="true"
rows="5"
selection="#{clienteMB.cliente}"
selectionMode="single"
rowSelectListener="#{clienteMB.selecionarCliente}"
onRowSelectComplete="dlgCliente.show();"
emptyMessage="Nao existe Cliente cadastrado"
style="width:100%"
update="frmCadastroCliente:itxNome, frmCadastroCliente:mskCpf, frmCadastroCliente:itxEmail ,frmCadastroCliente:itxSenha, frmCadastroCliente:mskCelular, frmCadastroCliente:mskTelefone, frmCadastroCliente:cldDataNascimento, frmCadastroCliente:sorEnviaSms, frmCadastroCliente:sorEnviaEmail, frmCadastroCliente:clkGravar, frmCadastroCliente:clkAlterar, frmCadastroCliente:clkAlterarSenha">
<p:column sortBy="#{cliente.nome}"
filterBy="#{cliente.nome}">
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{cliente.nome}" />
</p:column>
<p:column sortBy="#{cliente.cpf}"
filterBy="#{cliente.cpf}">
<f:facet name="header">
<h:outputText value="CPF" />
</f:facet>
<h:outputText value="#{cliente.cpf}" />
</p:column>
<p:column sortBy="#{cliente.dataNascimento}"
filterBy="#{cliente.dataNascimento}">
<f:facet name="header">
<h:outputText value="Data Nascimento" />
</f:facet>
<h:outputText value="#{cliente.dataNascimento}">
<f:convertDateTime locale="pt_br"/>
</h:outputText>
</p:column>
<p:column sortBy="#{cliente.email}"
filterBy="#{cliente.email}">
<f:facet name="header">
<h:outputText value="Email" />
</f:facet>
<h:outputText value="#{cliente.email}" />
</p:column>
<p:column sortBy="#{cliente.senha}"
filterBy="#{cliente.senha}">
<f:facet name="header">
<h:outputText value="Senha" />
</f:facet>
<h:outputText value="#{cliente.senha}" />
</p:column>
<p:column sortBy="#{cliente.celular}"
filterBy="#{cliente.celular}">
<f:facet name="header">
<h:outputText value="Celular" />
</f:facet>
<h:outputText value="#{cliente.celular}" />
</p:column>
</p:dataTable>
<p:panel style="width:99.2%">
<p:commandLink id="clkIncluir"
title="Incluir"
oncomplete="dlgCliente.show()"
action="#{clienteMB.incluir}"
update="frmCadastroCliente:itxNome, frmCadastroCliente:mskCpf, frmCadastroCliente:itxEmail ,frmCadastroCliente:itxSenha, frmCadastroCliente:mskCelular, frmCadastroCliente:mskTelefone, frmCadastroCliente:cldDataNascimento, frmCadastroCliente:sorEnviaSms, frmCadastroCliente:frmCadastroCliente:sorEnviaEmail, frmCadastroCliente:clkGravar, frmCadastroCliente:clkAlterar">
<h:graphicImage url="/imagens/novo.jpg"
style="border:0"/>
</p:commandLink>
<p:commandLink title="Apagar"
style="margin-left:20px"
actionListener="#{clienteMB.validarApagar}"
oncomplete="validarApagar(xhr, status, args)"
update="frmGridCliente:menssagensCliente"
process="frmGridCliente">
<h:graphicImage url="/imagens/apagar.jpg"
style="border:0"/>
</p:commandLink>
<h:commandLink title="Voltar"
action="#{clienteMB.voltar}"
style="margin-left:20px">
<h:graphicImage url="/imagens/voltar.jpg"
style="border:0"/>
</h:commandLink>
</p:panel>
<p:dialog widgetVar="dlgExclui"
header="Deseja apagar o cliente?"
modal="true">
<h:panelGrid columns="2">
<p:commandLink title="Sim"
actionListener="#{clienteMB.apagar}"
style="margin-left:40px"
update="frmGridCliente"
oncomplete="dlgCliente.hide(); dlgExclui.hide();">
<h:graphicImage url="/imagens/sim.jpg"
style="border:0"/>
</p:commandLink>
<p:commandLink title="Não"
style="margin-left:75px"
oncomplete="dlgCliente.hide(); dlgExclui.hide();">
<h:graphicImage url="/imagens/nao.jpg"
style="border:0"/>
</p:commandLink>
</h:panelGrid>
</p:dialog>
</h:form>
<h:form id="frmCadastroCliente">
<p:dialog id="dlgCliente"
widgetVar="dlgCliente"
header="Cliente"
width="500"
closable="false">
<h:panelGrid columns="2">
<h:outputLabel value="Nome:"
for="itxNome" />
<p:inputText id="itxNome"
value="#{clienteMB.cliente.nome}"
size="35"
required="true"
requiredMessage="Informe o Nome"/>
<h:outputLabel value="CPF:"
for="mskCpf" />
<p:inputMask id="mskCpf"
mask="999.999.999-99"
value="#{clienteMB.cliente.cpf}"
required="true"
requiredMessage="Informe o Cpf"/>
<h:outputLabel value="Data Nascimento:"
for="cldDataNascimento" />
<p:calendar id="cldDataNascimento"
value="#{clienteMB.cliente.dataNascimento}"
locale="pt_br"
readOnlyInputText="true"
navigator="true"
yearRange="-111:+39"
pattern="dd/MM/yyyy"/>
<h:outputLabel value="Celular:"
for="mskCelular" />
<p:inputMask id="mskCelular"
mask="999-9999-9999"
value="#{clienteMB.cliente.celular}"
required="true"
requiredMessage="Informe o celular"/>
<h:outputLabel value="Telefone:"
for="mskTelefone" />
<p:inputMask id="mskTelefone"
mask="999-9999-9999"
value="#{clienteMB.cliente.telefone}"/>
<h:outputLabel value="E-mail:"
for="itxEmail"/>
<p:inputText id="itxEmail"
value="#{clienteMB.cliente.email}"
size="35"
required="true"
requiredMessage="Informe o Email"/>
<h:outputLabel value="Senha"
for="itxSenha"/>
<p:inputText id="itxSenha"
value="#{clienteMB.cliente.senha}"
required="true"
requiredMessage="Informe a Senha"/>
</h:panelGrid>
<h:panelGrid columns="4" id="pnlSor">
<h:outputLabel value="Enviar Sms?:"
for="sorEnviaSms" />
<h:selectBooleanCheckbox id="sorEnviaSms"
value="#{clienteMB.cliente.enviaSms}"
style="margin-right:50px"/>
<h:outputLabel value="Enviar Email?:"
for="sorEnviaEmail" />
<h:selectBooleanCheckbox id="sorEnviaEmail"
value="#{clienteMB.cliente.enviaEmail}"/>
</h:panelGrid>
<h:panelGrid columns="3" >
<p:commandLink id="clkGravar"
title="Gravar"
action="#{clienteMB.gravar}"
disabled="#{!empty clienteMB.cliente.id}"
style="margin-right:20px"
update="itxNome, mskCpf, itxEmail ,itxSenha, mskCelular, mskTelefone, cldDataNascimento, sorEnviaSms, sorEnviaEmail, frmGridCliente:dtClientes, frmGridCliente:menssagensCliente">
<h:graphicImage url="/imagens/gravar.jpg"
style="border:0"/>
</p:commandLink>
<p:commandLink id="clkAlterar"
title="Alterar"
action="#{clienteMB.alterar}"
disabled="#{empty clienteMB.cliente.id}"
oncomplete="validarAlterar(xhr, status, args)"
update="itxNome, mskCpf, itxEmail ,itxSenha, mskCelular, mskTelefone, cldDataNascimento, sorEnviaSms, sorEnviaEmail, frmGridCliente, menssagensCliente"
style="margin-left:20px">
<h:graphicImage url="/imagens/alterar.bmp"
style="border:0"/>
</p:commandLink>
<p:commandLink id="clkCancelar"
title="Voltar"
style="margin-left:20px"
oncomplete="dlgCliente.hide();"
immediate="true">
<h:graphicImage url="/imagens/voltar.jpg"
style="border:0"/>
</p:commandLink>
</h:panelGrid>
</p:dialog>
</h:form>
</h:body>
</f:view>
</html>
Deste ja agradeço