Pessoal,
Segue, abaixo, o código da minha classe PessoaBean
public class PessoaBean {
String nome;
String idade;
ArrayList<String> generosMusicais;
EnderecoBean endereco;
ArrayList<TelefoneBean> telefone;
public PessoaBean() {
}
/* metodos get e set */
}
E abaixo o código do faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<managed-bean>
<managed-bean-name>Pessoa</managed-bean-name>
<managed-bean-class>beans.PessoaBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>nome</property-name>
<value>Max William</value>
</managed-property>
<managed-property>
<property-name>idade</property-name>
<value>38</value>
</managed-property>
<managed-property>
<property-name>generosMusicais</property-name>
<list-entries>
<value>Rock</value>
<value>Reggae</value>
<value>Pop</value>
</list-entries>
</managed-property>
<managed-property>
<property-name>endereco</property-name>
<value>#{EnderecoBean}</value>
</managed-property>
<managed-property>
<property-name>telefone</property-name>
<value>#{TelefoneBean}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>EnderecoBean</managed-bean-name>
<managed-bean-class>beans.EnderecoBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>logradouro</property-name>
<value>Avenida Epitário Pessoa></value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>450</value>
</managed-property>
<managed-property>
<property-name>cep</property-name>
<value>58000-000</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>TelefoneBean</managed-bean-name>
<managed-bean-class>beans.TelefoneBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>tipo</property-name>
<value>fixo</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>3224-6123</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular OI</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>8888-5555</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular TIM</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>999-444</value>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/PessoaFormBean.jsp</from-view-id>
<navigation-case><from-outcome>exibe</from-outcome>
<to-view-id>/exibeBean.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Está acontecendo o erro
“Bean propoerty endereco not found on parent class beans.EnderecoBean”
no trecho
<managed-property>
<property-name>endereco</property-name>
<value>#{EnderecoBean}</value>
</managed-property>
Analogamente, também acontece o erro
“Bean propoerty telefone not found on parent class beans.TelefoneBean”
<managed-property>
<property-name>telefone</property-name>
<value>#{TelefoneBean}</value>
</managed-property>
Será que houve algum erro na modelagem da minha associação na classe PessoaBean ou
é apenas um questão de sintaxe ?
Agradece,
Max William
No caso do telefone eu achei um erro:
O atributo (na classe Pessoa) está declarado como ArrayList, e no faces-config você tenta injetar um TelefoneBean.
Infelizmente não consegui descobrir o que acontece com o Endereco…
Consegui “resolver” o problema da sintaxe. Não me perguntem como.
De vez em quando a IDE acusa esse erro de sintaxe, eu fecho o projeto, encerro a IDE. E outra hora quando volto tá tudo OK, dá para entender ?
Só que agora ao tentar executar o arquivo PessoaFormBean.jsp, o gato Tom fica com raiva de mim e acusa o seguinte erro :
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Unable to create managed bean Pessoa. The following problems were found:
- Property endereco for managed bean Pessoa does not exist.
- Property telefone for managed bean Pessoa does not exist.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:270)
root cause
com.sun.faces.mgbean.ManagedBeanCreationException: Unable to create managed bean Pessoa. The following problems were found:
- Property endereco for managed bean Pessoa does not exist.
- Property telefone for managed bean Pessoa does not exist.
com.sun.faces.mgbean.BeanManager.create(BeanManager.java:204)
com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:88)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
org.apache.el.parser.AstValue.getValue(AstValue.java:107)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
javax.faces.component.UIOutput.getValue(UIOutput.java:184)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:242)
com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:178)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:126)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:271)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:202)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
Quanto à sugestão :
No caso do telefone eu achei um erro:
O atributo (na classe Pessoa) está declarado como ArrayList, e no faces-config você tenta injetar um TelefoneBean.
Vou discordar, pois em Coleções e Generics, até onde sei, é possível, sim, se ter um ArrayList de objetos de uma determinada classe.
Ainda continuo achando que o erro está na configuração dos beans no faces-config.xml
Agradeço d+ se conseguirem me ajudar a resolver este meu impasse.
[]'s
Max
Pessoal,
Aí vai uma errata, vou retirar o que disse neste trecho :
“Consegui “resolver” o problema da sintaxe. Não me perguntem como.
De vez em quando a IDE acusa esse erro de sintaxe, eu fecho o projeto, encerro a IDE. E outra hora quando volto tá tudo OK, dá para entender ?”
O problema da sintaxe acima mencionado ainda persisti sim, acabo de ver aqui.
Não vou repetir aqui, mas em cima eu citei o trecho de código do faces-config.xml, onde os erros de sintaxe são acusados e quais são estes erros.
Agradece,
Max
[quote=maxcarvalho]Quanto à sugestão :
No caso do telefone eu achei um erro:
O atributo (na classe Pessoa) está declarado como ArrayList, e no faces-config você tenta injetar um TelefoneBean.
Vou discordar, pois em Coleções e Generics, até onde sei, é possível, sim, se ter um ArrayList de objetos de uma determinada classe.
Ainda continuo achando que o erro está na configuração dos beans no faces-config.xml[/quote]
Não é isso não… acho que não me expliquei bem. Vou colocar aqui uns trechos do seu código:
Classe Pessoa:
public class PessoaBean {
ArrayList<TelefoneBean> telefone;
public ArrayList<TelefoneBean> getTelefone() {..}
public void setTelefone(ArrayList<TelefoneBean> tel) {...}
...
}
Declaração de Pessoa no faces-config:
<managed-bean>
<managed-bean-name>Pessoa</managed-bean-name>
<managed-bean-class>beans.PessoaBean</managed-bean-class>
...
<managed-property>
<property-name>telefone</property-name>
<value>#{TelefoneBean}</value>
</managed-property>
</managed-bean>
Declaração do bean Telefone no faces-config:
<managed-bean>
<managed-bean-name>TelefoneBean</managed-bean-name>
<managed-bean-class>beans.TelefoneBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>tipo</property-name>
<value>fixo</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>3224-6123</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular OI</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>8888-5555</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular TIM</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>999-444</value>
</managed-property>
</managed-bean>
Repare no seguinte:
- O atributo “telefone” de PessoaBean está declarado como ArrayList
- O bean #{TelefoneBean} é declarado como tipo TelefoneBean
- Pelo faces-config, você diz para injetar #{TelefoneBean} na propriedade telefone de PessoaBean.
Aí o que acaba acontecendo no Faces é o seguinte: ele tem o objeto #{TelefoneBean}, que é do tipo TelefoneBean.
A configuração diz para injetar esse valor na propriedade telefone do #{PessoaBean}, e é o que ele faz:
pessoaBean.setTelefone(telefoneBean)
Isso dá pau, pois o que existe é o método setTelefone(ArrayList ) e não setTelefone(TelefoneBean).
Resumindo o problema, você declarou que #{TelefoneBean} é um objeto da classe beans.TelefoneBean. Não é porque suas propriedades tipo e numero são setadas várias vezes que ele será uma lista de telefones.
Espero ter ajudado!
Ainda não entendi. Não tem como mapear da forma como eu estava tentando ?
Agradece,
Max
E o proplema ainda persiste…ainda estou apanhando com esses beans compostos
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<managed-bean>
<managed-bean-name>PessoaBean</managed-bean-name>
<managed-bean-class>beans.PessoaBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>generosMusicais</property-name>
<list-entries>
<value>Rock</value>
<value>Reggae</value>
<value>Pop</value>
</list-entries>
</managed-property>
<managed-property>
<property-name>endereco</property-name>
<value>#{EnderecoBean}</value>
</managed-property>
<managed-property>
<property-name>telefones</property-name>
<value>#{TelefoneBean}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>EnderecoBean</managed-bean-name>
<managed-bean-class>beans.EnderecoBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>logradouro</property-name>
<value>Avenida Epitácio Pessoa</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>450</value>
</managed-property>
<managed-property>
<property-name>cep</property-name>
<value>58030-110</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>TelefoneBean</managed-bean-name>
<managed-bean-class>beans.TelefoneBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>tipo</property-name>
<value>fixo</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>3224-6123</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular OI</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>8888-5555</value>
</managed-property>
<managed-property>
<property-name>tipo</property-name>
<value>celular TIM</value>
</managed-property>
<managed-property>
<property-name>numero</property-name>
<value>9999-4444</value>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/PessoaFormBean.jsp</from-view-id>
<navigation-case>
<from-outcome>exibe</from-outcome>
<to-view-id>/exibeBean.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
aula2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class><load-on-startup> 1 </load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
PessoaBean.java
package beans;
import java.util.ArrayList;
public class PessoaBean {
private String nome;
private Integer idade;
private ArrayList<String> generosMusicais;
private EnderecoBean endereco;
private ArrayList<TelefoneBean> telefones = new ArrayList<TelefoneBean>();
public PessoaBean() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Integer getIdade() {
return idade;
}
public void setIdade(Integer idade) {
this.idade = idade;
}
public ArrayList<String> getGenerosMusicais() {
return generosMusicais;
}
public void setGenerosMusicais(ArrayList<String> generosMusicais) {
this.generosMusicais = generosMusicais;
}
public EnderecoBean getEndereco() {
return endereco;
}
public void setEndereco(EnderecoBean endereco) {
this.endereco = endereco;
}
public ArrayList<TelefoneBean> getTelefones() {
return telefones;
}
public void setTelefones(ArrayList<TelefoneBean> telefones) {
this.telefones = telefones;
}
}
TelefoneBean.java
package beans;
public class TelefoneBean {
private String tipo;
private String numero;
public TelefoneBean() {
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
}
PessoaFormBean.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<f:view>
<head>
<title>Insert title here</title>
</head>
<body>
<h:form>
<h:panelGrid columns='2'>
<h:outputText value='Nome:'/>
<h:inputText value='#{PessoaBean.nome}'/>
<h:outputText value='Idade:'/>
<h:inputText value='#{PessoaBean.idade}'/>
<h:commandButton type='submit' value='Enviar' action='exibe'/>
</h:panelGrid>
</h:form>
</body>
</f:view>
</html>
exibeBean.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Insert title here
</title>
</head>
<body>
<f:view>
<h:outputText>Dados do Bean Pessoa</h:outputText>
<br />
<h:outputText>--------------------</h:outputText>
<br />
<h:outputText value="Nome : #{PessoaBean.nome}"></h:outputText>
<br />
<h:outputText value="Idade : #{PessoaBean.idade}"></h:outputText>
<br/>
<h:outputText value="Gêneros Musicais"></h:outputText>
<br />
<h:outputText value="1o gênero musical #{PessoaBean.generosMusicais[0]}"></h:outputText>
<br />
<h:outputText value="2o gênero musical #{PessoaBean.generosMusicais[1]}"></h:outputText>
<br />
<h:outputText value="3o gênero musical #{PessoaBean.generosMusicais[2]}"></h:outputText>
<br />
<h:outputText>Endereco :</h:outputText>
<h:outputText value=" #{PessoaBean.endereco.logradouro}"></h:outputText>
<h:outputText value=" nº #{PessoaBean.endereco.numero}"></h:outputText>
<br />
<h:outputText value="CEP : #{PessoaBean.endereco.cep}"></h:outputText>
<br/>
<br/>
<h:outputText value="Telefones"></h:outputText>
<br/>
<h:outputText value="1o telefone - Tipo : #{PessoaBean.telefones[0].tipo}"></h:outputText>
<br/>
<h:outputText value=" Número : #{PessoaBean.telefones[0].numero}"></h:outputText>
<br />
<h:outputText value="2o telefone - Tipo : #{PessoaBean.telefones[1].tipo}"></h:outputText>
<br/>
<h:outputText value=" Número : #{PessoaBean.telefones[1].numero}"></h:outputText>
<br />
<h:outputText value="3o telefone - Tipo : #{PessoaBean.telefones[2].tipo}"></h:outputText>
<br/>
<h:outputText value=" Número : #{PessoaBean.telefones[2].numero}"></h:outputText>
<br />
</f:view>
</body>
</html>
E o erro acusado é este :
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Cannot convert beans.TelefoneBean@12e7c6a of type class beans.TelefoneBean to class java.util.ArrayList
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
root cause
java.lang.IllegalArgumentException: Cannot convert beans.TelefoneBean@12e7c6a of type class beans.TelefoneBean to class java.util.ArrayList
Ainda não entendi como vou resolver isto ?
Se alguém puder me ajudar, ficarei imensamente grato.
Agradece,
Max Carvalho