ArrayList de um objeto com JSF

2 respostas
bdoweb

Olá Pessoal,

Seguinte tenho um formulario JSF onde tenho várias vezes o mesmo objeto Contact("TypeFone","DDD","Telefone") e quero tornor isso uma ArrayList para meu back bean .....

Meu faces-config está assim:
<faces-config>
	<managed-bean>
		<managed-bean-name>person</managed-bean-name>
		<managed-bean-class>br.com.meindica.entitybeans.Person</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>

	<managed-bean>
		<managed-bean-name>contact</managed-bean-name>
		<managed-bean-class>br.com.meindica.entitybeans.Contact</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	
	<managed-bean>
		<managed-bean-name>personBeans</managed-bean-name>
		<managed-bean-class>br.com.meindica.facesbeans.PersonFacesBean</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
		
		<managed-property>
			<property-name>person</property-name>
			<value>#{person}</value>
		</managed-property>
	
		<managed-property>
			<property-name>contact</property-name>
			<value>#{contact}</value>
		</managed-property>
	</managed-bean>
</faces-config>

E o meu back bean está assim:

public class PersonFacesBean {
	
	private Person person;
	
	private Address address;
	
	private List<Contact> contact = new ArrayList<Contact>();
	
	private static Logger log;
	
	public PersonFacesBean() {
		log = Logger.getLogger(PersonFacesBean.class);
	}
	
	public String add() {
		try {
			BeanPerson bo = new BeanPerson();
			bo.save( person , address, contact );
			return "success";
		}
		catch (NewUserException userEx){
			log.warn("Erro em: " + userEx.getMessage());
			return "failure";
		}
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	
	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

	public List<Contact> getContact() {
		return contact;
	}

	public void setContact(List<Contact> contact) {
		this.contact = contact;
	}
}

E o meu facelets :

<h:outputLabel value="Telefone: " for="fone" /> 
<h:selectOneMenu value="#{contact.typeFone}">
	<f:selectItem itemLabel="Residencial" itemValue="residencial" />
	<f:selectItem itemLabel="Celular" itemValue="celular" />
	<f:selectItem itemLabel="Comercial" itemValue="comercial" />
</h:selectOneMenu>
<h:inputText value="#{contact.prefixFone}" id="prefixFone" size="2" />
<h:inputText value="#{contact.fone}" id="fone" /> 
<h:message for="fone"/> 
<h:commandButton action="#{personBeans.add}" value="Adicionar" />

Mas quando envio o formulario ele dá o seguinte erro:

SEVERE: Servlet.service() for servlet Faces Servlet threw exception javax.faces.FacesException: Error performing conversion of value br.com.meindica.entitybeans.Contact@1d7fc31 of type class br.com.meindica.entitybeans.Contact to type interface java.util.List for managed bean personBeans. at com.sun.faces.config.ManagedBeanFactoryImpl.getConvertedValueConsideringPrimitives(ManagedBeanFactoryImpl.java:991) at com.sun.faces.config.ManagedBeanFactoryImpl.setPropertiesIntoBean(ManagedBeanFactoryImpl.java:664) at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:345) at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:521) at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:83) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53) at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:58) at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:45) at org.apache.el.parser.AstValue.getTarget(AstValue.java:42) at org.apache.el.parser.AstValue.invoke(AstValue.java:127) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:95) at javax.faces.component.UICommand.broadcast(UICommand.java:383) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:450) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:759) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)

Como posso resolver esse problema?

Obrigado

2 Respostas

bdoweb

Galera desculpe o flood…

Mas alguém sabe como posso resolver esse problema ???

Giulliano

Vamos lá…

//Esse é o seu erro no console.
javax.faces.FacesException: Error performing conversion of value br.com.meindica.entitybeans.Contact@1d7fc31 of type class br.com.meindica.entitybeans.Contact to type interface java.util.List for managed bean personBeans.

E esse é o seu erro de lógica:

&lt;managed-bean&gt;   
        &lt;managed-bean-name&gt;contact&lt;/managed-bean-name&gt;   
        &lt;managed-bean-class&gt;br.com.meindica.entitybeans.Contact&lt;/managed-bean-class&gt;   
        &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;   
    &lt;/managed-bean&gt;

Você não pode usar o mesmo nome para referenciar um ATRIBUTO e referencia uma CLASSE.

Se trocar o nome tudo irá funcionar.

Criado 4 de março de 2008
Ultima resposta 6 de mar. de 2008
Respostas 2
Participantes 2