JSF Bean

8 respostas
D

Olá pessoal, no exemplo que estou fazendo para aprender utilizar o JSF, criei uma classe CADASTRO apenas com os getters e setters dos atributos que no caso são: Nome, Endereco, Cidade.

Criei ainda uma classe DaoCadastro a qual contém um método chamado Inserir que faz a inserção dos dados no BD, que por sua vez recebe um parametro para inserir
public String Inserir(Cadastro cad)

Minha dúvida é a seguinte:

Na jsp ou jsf fiz esse código:
<h:inputText value="#{cadastro.nome}" />
<h:inputText value="#{cadastro.endereco}" />
<h:inputText value="#{cadastro.cidade}" />
Ai no botão da JSF coloquei o código
<h:commandButton value="Inserir" action="#{dao.Inserir(cadastro)}" />
//cadastro é o nome que está no bean
Fiz o mapeamento 2 beans no Faces-config BEAN:
<managed-bean>
		<managed-bean-name>cadastro</managed-bean-name>
		<managed-bean-class>model.Cadastro</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	<managed-bean>
		<managed-bean-name>dao</managed-bean-name>
		<managed-bean-class>conex.DaoCadastro</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
Ao rodar, foi lançada a seguinte exceção:
org.apache.jasper.JasperException: /inserir.jsp(35,5) The function Inserir must be used with a prefix when a default namespace is not specified
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
	org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1506)
	org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:129)
	org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
	org.apache.jasper.compiler.ELNode$Visitor.visit(ELNode.java:242)
	org.apache.jasper.compiler.ELNode$Root.accept(ELNode.java:56)
	org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
	org.apache.jasper.compiler.Validator$ValidateVisitor.validateFunctions(Validator.java:1531)
	org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1176)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:846)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:865)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:865)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
	org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1763)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:439)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:114)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)

O que fiz de errado?
Como posso resolver?

Obrigado!

8 Respostas

rlaf

No comandButton vc está passando o parametro errado, a maneira certa é a seguinte:

<h:commandButton value="Inserir" action="#{dao.Inserir}">  
      <f:setPropertyActionListener value="#{cadastro}" target="#{dao.cadastro}"/>
</h:commandButton>

OBS: Não é legal vc manipular as classes de modelo e de dao diretamente, cria uma classe de controle e manipula os dois através dela.

D
Cara, não funcionou!
javax.servlet.ServletException: javax.servlet.jsp.JspException: The setPropertyActionListener tag should be nested within a tag that is associated with a component of type javax.faces.component.ActionSource.
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
	org.apache.jsp.inserir_jsp._jspService(inserir_jsp.java:93)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:439)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:114)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)


root cause 

javax.servlet.jsp.JspException: The setPropertyActionListener tag should be nested within a tag that is associated with a component of type javax.faces.component.ActionSource.
	com.sun.faces.taglib.jsf_core.SetPropertyActionListenerTag.doStartTag(SetPropertyActionListenerTag.java:155)
	org.apache.jsp.inserir_jsp._jspx_meth_f_005fsetPropertyActionListener_005f0(inserir_jsp.java:357)
	org.apache.jsp.inserir_jsp._jspx_meth_h_005fform_005f0(inserir_jsp.java:206)
	org.apache.jsp.inserir_jsp._jspx_meth_f_005fview_005f0(inserir_jsp.java:120)
	org.apache.jsp.inserir_jsp._jspService(inserir_jsp.java:83)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:439)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:114)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
Na linha
<f:setPropertyActionListener value="#{cadastro}" target="#{dao.cadastro}"/>

ao digitar dao.cadastro, o próprio eclipse já sinaliza que "cadastro" não pode ser resolvido "cannot be resolved

Mas de qalqer forma, obrigado pelas dicas e pela tentativa!

E

Como o diogojava123 falou, é melhor você criar um método de acesso no controller/Managed Bean, assim diretamente do jsp não fico legal não…
Dê uma procurada sobre Managed Bean na internet

D

Emannuel, não entendi a parte que você diz “diretamente do jsp”. Você quis dizer que devo criar uma classe para receber esses dados e ai sim repassar para meu DAO? Como se fosse uma servlet?

obrigado!

E

não, digo criar um método sem parametros no controlador que acesse o service/dao e salve a entidade que voce deseja

D

Emannuel, acho que ainda não entendi completamente, veja o q eu tentei fazer:

public class controllerBean {

	public void inserir(){
	DaoCadastro dao = new DaoCadastro();
	Cadastro cads= new Cadastro();
	
	/*Crio variaveis para receber do JSP?
        Aqui seta o objeto cads? com os valores da JSP?*/
 	dao.Inserir(cads);
	
	}
}
E quando a própria página JSP? Continuo usando cadastro ou agora o controllerBean?
<td><h:inputText value="#{cadastro.nome}" /></td>
			</tr>

Muito Obrigado pela ajuda!

E
public class controllerBean {  
       Entidade entidade;

       public void inserir(){  
       DaoCadastro dao = new DaoCadastro();          
         
       /*Crio variaveis para receber do JSP? 
           Aqui seta o objeto cads? com os valores da JSP?*/  
       dao.Inserir(entidade);  
         
       }  
   }
<td><h:inputText value="#{controllerBean.entidade.nome}" /></td>

Um conselho que eu daria pra voce seria pra frear um pouco mais e ler um pouco de teoria sobre java e jsf.
mas é por ai o caminho

A

pesquisa thiago chaves no google tem video aula interessante de jsf

Criado 10 de setembro de 2010
Ultima resposta 18 de set. de 2010
Respostas 8
Participantes 4