Problema com JSF

12 respostas
J

oi pessoal

queria ajuda de vcs, eu estou aprendendo JSF e estou seguindo um manual q encontrei na internet mesmo. Só que estou tendo problema de direcionar as paginas no faces-config.xml.

Olha como ele está:
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<!--faces-config xmlns="http://java.sun.com/JSF/Configuration"-->

<faces-config>
    <managed-bean>
	<managed-bean-name>gerenciadorContato</managed-bean-name>
	<managed-bean-class>agenda.GerenciadorContato</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    
    <navigation-rule>
	<from-view-id>/incluir.jsp</from-view-id>
	<navigation-case>
	    <from-outcome>sucesso</from-outcome>
	    <to-view-id>/sucesso.jsp</to-view-id>
	</navigation-case>
	<navigation-case>
	    <from-outcome>erro</from-outcome>
	    <to-view-id>/erro.jsp</to-view-id>
	</navigation-case>	
    </navigation-rule>
    
    <navigation-rule>
	<from-view-id>*</from-view-id>
	<navigation-case>
	    <from-outcome>incluir</from-outcome>
	    <to-view-id>/incluir.jsp</to-view-id>
	</navigation-case>
	<navigation-case>
	    <from-outcome>consultar</from-outcome>
	    <to-view-id>/consultar.jsp</to-view-id>
	</navigation-case>
    </navigation-rule>
</faces-config>

porém se eu estou na tela de inclusão , clico no botão incluir e devolve uma string "sucesso".....só que não entra na sucesso.jsp

olha minha classe:
package agenda ;

import java.util.ArrayList ;
import java.util.Date ;
import java.util.List ;

import javax.faces.event.ActionEvent ;
import javax.faces.model.DataModel ;

import javax.faces.model.ListDataModel ;

import org.apache.myfaces.custom.navmenu.NavigationMenuItem ;

public class GerenciadorContato
{
    private Contato contato = new Contato();
    private DataModel contatos;
    private String tituloTela;
    
    public void consultar(ActionEvent e)
    {
	tituloTela = "Contatos da Agenda";
	ContatoDao cDao = new ContatoDao();
	contatos = new ListDataModel(cDao.consultar());
    }
    
    public String incluir(ActionEvent e)
    {
	ContatoDao cDao = new ContatoDao();
	cDao.incluir(contato);
	return "sucesso";
    }

   // get e set omitidos
}
minha jsp de incluir:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
    <link rel="StyleSheet" type="text/css" href="css/style.css" media="screen" >
    <link rel="StyleSheet" type="text/css" href="css/layout.css" media="screen" >
    <title>incluir</title>
  </head>
  <body bgcolor="#ffffff">
  <div id="container">
      <div id="header">   <img src="images/banner.jpg"/> </div>
      <div id="leftBar">      </div>
      <div id="content">    
	    <f:view>
		<h:form>
		    <%@include file="menu.jsp"%>
		    <fieldset> 
			<legend>Inclusão de Contatos:</legend> 
			      <h:panelGrid columns="2">
				    <h:outputText value="Nome:"/>
				     <h:inputText value="#{gerenciadorContato.contato.nome}" styleClass="edit"/>
				     <h:outputText value="Telefone:"/>
				     <h:inputText value="#{gerenciadorContato.contato.telefone}" styleClass="edit"/>
				     <h:outputText value="Favorito:"/>
				     <h:selectBooleanCheckbox value="#{gerenciadorContato.contato.favorito}"/>
				     <h:outputText value="Aniversário:"/>
				      <t:inputCalendar renderAsPopup="true" styleClass="edit" renderPopupButtonAsImage="true" value="#{gerenciadorContato.contato.aniversario}"/>
					<h:commandButton value="Incluir" actionListener="#{gerenciadorContato.incluir}" styleClass="botoes" rendered="true"/>
			    </h:panelGrid>
		    </fieldset>
		    
		    <fieldset> 
			<legend>Dados Incluidos:</legend> 
			      <h:panelGrid columns="2">
				    <h:outputText value="Nome:"/>
				    <h:outputLabel value="#{gerenciadorContato.contato.nome}"/>
				     <h:outputText value="Telefone:"/>
				     <h:outputLabel value="#{gerenciadorContato.contato.telefone}"/>
				     <h:outputText value="Favorito:"/>
				     <h:outputLabel value="#{gerenciadorContato.contato.favorito}"/>
			    </h:panelGrid>
		    </fieldset>
		</h:form>
	    </f:view>  
      </div>
      <div id="rightBar">      </div>
      <div id="footer">    <img src="images/barra.jpg"/>  </div>
    </div>
  </body>
</html>

se alguem já pssou por isso e puder me ajudar, agradeço

só preciso direcionar para sucesso.jsp ou erro.jsp

vlw

12 Respostas

J

sucesso.jsp esta no seu web-content?
o incluir.jsp nesse caso deve estar la tambem

J

os dois estão no mesmo nivel, dentro de web-content

e se fosse erro de não encontrar a classe, não deveria dar o erro 404?

porque não da erro, ele persiste e volta pra mesma tela…

J

Tenta tirar o “ActionEvent e” do metodo incluir que
requer retorno void e troque de “actionListener” para “action” no botao

J

Jean
mas o problema não eh a ação, eu consigo entrar no método…ele chega a incluir normal

só não chega vai para outra tela. Eu axo q esse erro está no faces-config. Mas não to achando o erro

B

No h:commandButton, troque o
actionListener="#{gerenciadorContato.incluir}“
por action=”#{gerenciadorContato.incluir}",

pois o actionListener não é usada para navegação.
Retire os parametros do método incluir e o retorno deve ser String.

[]s

J

valeu bruno

era isso mesmo, agora deu certo

brigado

J

Voce fez a alteracao e o erro persistiu?
Eu testei o seu exemplo e funciou direitinho.
Nao ha como fazer a navegacao utilizando actionListener pois
o metodo exige void como retorno, colocando retorno String,
action no botao e removendo o ActionEvent vai fazer o que voce
deseja. Nesse caso nao vejo pq usar actionListener.

J

Jean deu certo sim....mudei para action e resolveu o problema...

agora tem outro problema, estou usando o tomahawk e o myfaces para o exemplo acima, e qdo clico no menu (q foi gerado pelo jsf) ele da erro....como se tivesse faltando algo do tomahawk

olha o erro que aparece no browser

Erro: dummyForm.elements.jscook_action is undefined
Arquivo-fonte: http://172.16.22.119:8989/testejsf/faces/myFacesExtensionResource/org.apache.myfaces.renderkit.html.util.MyFacesResourceLoader/12436229/navmenu.jscookmenu.HtmlJSCookMenuRenderer/MyFacesHack.js;jsessionid=ac101677231dd3b6e9c0ab0d4a69adb4b4952484bb51
Linha: 33

olha minha tela de menu:

&lt;%@ page contentType="text/html;charset=windows-1252"%&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;
&lt;%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%&gt;
		&lt;h:panelGrid width="500px" style="background­color: #cfc"&gt;
		 &lt;t:jscookMenu layout="hbr" theme="ThemePanel"&gt;
			 &lt;t:navigationMenuItem itemLabel="Cadastro"&gt;
				    &lt;t:navigationMenuItem itemLabel="Incluir Contato" action="incluir"&gt;&lt;/t:navigationMenuItem&gt;
			 &lt;/t:navigationMenuItem&gt;
			  &lt;t:navigationMenuItem itemLabel="Consultar"&gt;
				    &lt;t:navigationMenuItem itemLabel="Consultar Todos" action="consultar"&gt;&lt;/t:navigationMenuItem&gt;
				    &lt;t:navigationMenuItem itemLabel="Consultar Aniversáriantes de Hoje" action="consultar"&gt;&lt;/t:navigationMenuItem&gt;
			 &lt;/t:navigationMenuItem&gt;
			 &lt;t:navigationMenuItem itemLabel="Favoritos"&gt;
			 &lt;/t:navigationMenuItem&gt;
		&lt;/t:jscookMenu&gt;
	      &lt;/h:panelGrid&gt;

esse menu.jsp eh um include da tela incluir que já foi postada....

eu consigo acessar normalmente a tela incluir, mas se clico no menu...da esse erro ai

preciso de ajuda :?

J

Crie um form e coloque o menu dentro junto com esse campo:

No wiki do menu diz que deve haver esse campo.
http://wiki.apache.org/myfaces/JSCook_Menu
Obs: No google tem bastante coisa sobre o assunto.

J

Jean, não deu certo não

coloquei esse campo hidden e não funcionou

não coloquei o form no menu.jsp porque ele eh include

e na tela que eu incluo, já existe o form.

repara la na tela incluir.jsp que eu faço include do menu.jsp (e está dentro do form).

Agora só adicionei o campo hidden no menu.jsp. Mas continua o mesmo erro

J

pelo que eu estou entendendo, o erro pode ser um filtro declarado no web.xml:

<filter> <filter-name>extensionsFilter</filter-name> <filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class> </filter> <filter-mapping> <filter-name>extensionsFilter</filter-name> <url-pattern>*.faces</url-pattern> </filter-mapping> <filter-mapping> <filter-name>extensionsFilter</filter-name> <url-pattern>/faces/*</url-pattern> </filter-mapping>

isso foi declarado no inicio do meu web.xml, atnes do mapeamento do myfaces

será q pode ser isso?

J

Olha só

tirei o menu da jsp separada (que eu tava fazendo include) e coloquei no incluir.jsp, dai deu certo

porque?

jsf não permite fazer include?

Criado 27 de maio de 2009
Ultima resposta 29 de mai. de 2009
Respostas 12
Participantes 3