[RESOLVIDO] - Ajuda navegação jsf

30 respostas
A

Olá, achei uns tutoriais, e não consegui.

Quero linkar as paginas jsf com metodos controladores.

vejam o formulario que tenho em jsf de login:

<p:tab title="Faça seu Login">  
						            <h:panelGrid columns="2" cellpadding="10">  
						                <p:graphicImage value="../images/cadeado.png" />
						                
						                
						                <p:panel id="panel" header="Acesso Restrito">  
  
        <p:messages id="msgs"/>  
  
        <h:panelGrid columns="3">  
            <h:outputLabel for="Usuário" value="Usuário " />  
            <p:inputText id="firstname" value="#{personBean.firstname}" required="true" label="Firstname">  
                <f:validateLength minimum="2" />  
            </p:inputText>  
            <p:message for="firstname" display="icon"/>  
  
            <h:outputLabel for="Senha" value="Senha " />  
            <p:inputText id="surname" value="#{personBean.surname}" label="Surname" required="true">  
                <f:validateLength minimum="2" />  
                <p:ajax update="msgSurname" event="keyup" />  
            </p:inputText>  
            <p:message for="surname" id="msgSurname" display="icon"/>  
  
        </h:panelGrid>  
  
        <p:commandButton id="btn" value="Acessar" update="panel" action="#{navegacaoController.menuPrincipal}"/>  
    </p:panel>
ta chamando o metodo da classe controladora, veja como esta o metodo:
public class navegacaoController {
	
	public String menuPrincipal()
	{
		
		return "principal.xhtml";
	}

Mas ao clicar no botão acessar, nada ocorre. não consegui chamar a pagina , é so um teste sem autenticação nem nada.
alguem pode ajudar

30 Respostas

A

help

asousaj

Esse código que postou está dentro de um <h:form></h:form> ?

A

Isso!
mas o botão é como se tivesse sem vida, o action nao existe, eu clico e nada ocorre.

M

Olá amigo, boa tarde !!

Acredito que seu problema não está na navegação do JSF, e sim na utilização do primefaces.

Tenta colocar a propriedade ajax=“false”.

http://www.primefaces.org/showcase/ui/commandButton.jsf

Abraços.
Felipe Mozena

A

fiz isso, ai agora quando clica ele recarrega a mesma pagina, independente do que eu colocar no action

asousaj

O método menuPrincipal() está sendo executado?
Para ter certeza pode colocar um System.out.println(“qualquer coisa”); e verificar se sai na console.

A

ele não chega no metodo ja fiz varios testes.

asousaj

A classe navegacaoController está com a anotação @ManagedBean ?

A

não, mas coloquei agora @ManagedBean(name=“navegacaoController”)

e nada.

asousaj

Cara testei aqui e funciona perfeitamente.

Alterações:
Coloquei <h:form> logo após <h:body> e obviamente </h:form> antes de </h:body>
Modifiquei o return para

return "/principal.xhtml?faces-redirect=true";

E a anotação @ManagedBean na navegacaoController.

A

criei outro botão em outro lugar e funciona o link, so que nao ta encontrando a classe,
da esse erro:
javax.el.PropertyNotFoundException: /pages/index.xhtml @41,123 action="#{navegacaoController.menuPrincipal()}": Target Unreachable, identifier ‘navegacaoController’ resolved to null

Detalhe: se colocar a pagina direta funciona. qual a vantagem de usar controladores?

asousaj

adam_sandler:
da esse erro:
javax.el.PropertyNotFoundException: /pages/index.xhtml @41,123 action="#{navegacaoController.menuPrincipal()}": Target Unreachable, identifier ‘navegacaoController’ resolved to null

Cara com a anotação @ManagedBean estando correta isso não deve acontecer.

Minha opinião:

  • Manutenção.
  • O fato de poder executar uma ação antes de redirecionar.
A

o ManagedBean, tem q ser o nome da classe? e na hora de chamar chama “meubean.metodo” ?

ErickRAR

Tente sem o () na action. E no seu bean coloque apenas a anotação @ManagedBean, sem o name.

action="#{navegacaoController.menuPrincipal}"
A

So funciona com o link direto, colocando a pagina dentro do action.

se eu colocar #{navegacaoController.menuPrincipal}

ele atualiza a mesma pagina.não consigo chegar no metodo de forma alguma.

M

Segue algumas coisas para você checar :

  • Essa pagina existe algum campo obrigatório que esteja utilizando a propriedade required=“true”. Se sim, você deve adicionar no botão a propriedade imediate=“true”.
  • Sua classe deve conter alguma anotação: @ManagedBean ou @Controller, depende do que você está utilizando.
  • Para confirmar que seu managedBean está funcionando corretamente, olhe no log do servidor e procure pelo nome do seu bean.

Abraços,
Felipe Mozena

A

mozena:
Segue algumas coisas para você checar :

  • Essa pagina existe algum campo obrigatório que esteja utilizando a propriedade required=“true”. Se sim, você deve adicionar no botão a propriedade imediate=“true”.
  • Sua classe deve conter alguma anotação: @ManagedBean ou @Controller, depende do que você está utilizando.
  • Para confirmar que seu managedBean está funcionando corretamente, olhe no log do servidor e procure pelo nome do seu bean.

Abraços,
Felipe Mozena

Sim, existe, mas ja coloquei imediate=“true” e nada.

como olho o log no servidor?

ErickRAR

Como estão os seus forms?

A

Toda a pagina:
o botão fica la no final.

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">

<h:head>


<link rel="stylesheet" href="../css/5grid/core.css" />
<link rel="stylesheet" href="../css/5grid/core-desktop.css" />
<link rel="stylesheet" href="../css/5grid/core-1200px.css" />
<link rel="stylesheet" href="../css/5grid/core-noscript.css" />
<link rel="stylesheet" href="../css/style.css" />
<link rel="stylesheet" href="../css/style-desktop.css" />

<title>Ex Machina by HTML5Templates.com</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<noscript>

</noscript>
<script src="css/5grid/jquery.js"></script>
<script src="css/5grid/init.js?use=mobile,desktop,1000px&amp;mobileUI=1&amp;mobileUI.theme=none"></script>
<!--[if IE 9]><link rel="stylesheet" href="css/style-ie9.css" /><![endif]-->



	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Meu Sistema</title>
	
</h:head>
<h:body>

<div id="header-wrapper">
	<header id="header">
		<div class="5grid-layout">
			<div class="row">
				<div class="4u" id="logo">
					<h1><a href="#" class="mobileUI-site-name">C.E.J.T</a></h1>
					<p>Desenvolvedores associados</p>
				</div>
				
			</div>
		</div>
	</header>
</div>
<div class="5grid-layout">
	<div class="row">
		<div id="banner" class="12u">
			<div class="container"><a href="#"><img src="../images/pics01.jpg" alt=""> </img></a></div>
		</div>
	</div>
</div>
<div id="wrapper">
	<div id="marketing">
		<div class="5grid-layout">
			<div class="row divider">
				<div class="3u">
					<section>
						<h2 class="title">Ofertas</h2>
						<p class="subtitle">Veja nossas ofertas</p>
						<p><a href="#"><img src="../images/pics13.jpg" alt=""></img></a></p>
						
					</section>
				</div>
				
				
				<div class="3u">
					<section>
						<h2 class="title">login</h2>
							<h:form>  
  
						    <p:accordionPanel dynamic="true" cache="true">  
						        <p:tab title="Faça seu Login">  
						            <h:panelGrid columns="2" cellpadding="10">  
						                <p:graphicImage value="../images/cadeado.png" />
						                
						                
						                <p:panel id="panel" header="Acesso Restrito">  
  
        <p:messages id="msgs"/>  
  
        <h:panelGrid columns="3">  
            <h:outputLabel for="Usuário" value="Usuário " />  
            <p:inputText id="firstname" value="" required="true" label="Firstname">  
                <f:validateLength minimum="2" />  
            </p:inputText>  
            <p:message for="firstname" display="icon"/>  
  
            <h:outputLabel for="Senha" value="Senha " />  
            <p:inputText id="surname" value="" label="Surname" required="true">  
                <f:validateLength minimum="2" />  
                <p:ajax update="msgSurname" event="keyup" />  
            </p:inputText>  
            <p:message for="surname" id="msgSurname" display="icon"/>  
  
        </h:panelGrid>  
  
        <h:commandButton id="btn" value="Acessar" update="panel" ajax="false"   action="principal.xhtml"/>  
    </p:panel>  
						                
						
						                  
						            </h:panelGrid>
						            </p:tab>
						      </p:accordionPanel>  
						                    
						      </h:form>						
												
					</section>
				</div>
			</div>
		</div>
	</div>
	
</div>
	<div class="5grid-layout" id="copyright">
		<div class="row">
			<div class="12u">
				<p><a> Todos os Direitos Reservados - C.E.J.T - Desenvolvedores Associados</a></p>
			</div>
		</div>
	</div>

</h:body>
</html>
ErickRAR

Tente com p:commandButton ao invés de h:.

<p:commandButton id="btn" value="Acessar" update="panel"  action="#{navegacaoController.menuPrincipal}"/>
A

ja tinha tentado, fica a mesma coisa.

A

alguem?
ainda não consegui

asousaj

Cara o problema o problema é o value="" nos teus 2 inputText, ali deveria estar invocando algum atributo via managed bean.

Pra provar, sem usar managedbeans, coloque value=“aaaa” ou qualquer valor com 2 ou mais caracteres e teste.

A

agora voltou a da isso:
javax.el.PropertyNotFoundException: /pages/index.xhtml @101,128 action="#{navegacaoController.menuPrincipal}": Target Unreachable, identifier ‘navegacaoController’ resolved to null

asousaj

adam_sandler:
agora voltou a da isso:
javax.el.PropertyNotFoundException: /pages/index.xhtml @101,128 action="#{navegacaoController.menuPrincipal}": Target Unreachable, identifier ‘navegacaoController’ resolved to null

Cara posta ai a NavegacaoController, completa.

A

@ManagedBean

public class NavegacaoController {

public String menuPrincipal(){
	
	
	System.out.println("qualquer coisa");
	return "/principal.xhtml?faces-redirect=true";  
}

OBS:
coloquei maiusculo agora.

A

?

A

voce pode me mandar seu skype?

asousaj

Cara não uso skype mas anota meu e-mail.

adriano(ponto)sousa(arroba)hotmail(ponto)com

Manda o projeto que dou uma olhada.

A
Olá, consegui resolver o problema apenas colocando o (name = NavegacaoController)

do ManagedBean, e mudando o return para apenas

return principal.xhtml ;  (ja que esta no mesmo diretorio)

testei outras paginas em outros diretorios e funcionou tambem, creio que o erro principal foi o que o adriano ai falou, os campos estavem esperando beans,ai colocando os valores e fazendo essas alterações funcionou =)
vlw mais uma vez.

Criado 7 de janeiro de 2014
Ultima resposta 13 de jan. de 2014
Respostas 30
Participantes 4