N vezes o mesmo objeto com JSF

Olá pessoal,

Seguinte vou tentar ilustra meu problema. Estou montando um exemplinho básico para mim aprender …

Seguinte tenho objeto Person(username,password,age,description) um obejto contato (typePhone, ddd,phone) que se relaciona em 1:n com person …

Meu backbean até o momento está assim:

[code]public class BackBeanData {
private Person person;
private Collection contacts = new ArrayList();

public BackBeanData(){
	Contact contact = new Contact();
	contact.setTypePhone("celular");
	contact.setDdd(11);
	contact.setPhone("86748116");
	contact.setPerson(person);
	contacts.add(contact);
}

public String save() {
	try {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("meindica");
		EntityManager manager = factory.createEntityManager();
		EntityTransaction tx = manager.getTransaction();
		
		tx.begin();
		
		Contact contact2 = new Contact();
		contact2.setTypePhone("residencial");
		contact2.setDdd(11);
		contact2.setPhone("55236094");
		contact2.setPerson(person);
		
		contacts.add(contact2);
		
		person.setContact(contacts);
		
		manager.persist(person);
		tx.commit();
		return "ok";
	}
	catch (Exception e) {
		return "error";
	}
}
/* GETTERS AND SETTERS */

}
[/code]

Bom como tenho um relacionamento de 1:n entre Person e Contact na minha página com o JSF eu queria receber esses dados … Ou seja … Quero fazer um JavaScript que fique repetindo os campos do formulario com informações de contato … E que esses campos preenchidos se tornem parte do minha collection contacts …

Bom meu faces-config.xml é o seguinte :

[code]

person
br.com.meindica.entity.Person
session

name
<Here your name>

<managed-bean>
    <managed-bean-name>contacts</managed-bean-name>
    <managed-bean-class>java.util.ArrayList</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <list-entries>
            <value-class>java.util.ArrayList</value-class>
            <null-value />
        </list-entries>
</managed-bean>

<managed-bean>
    <managed-bean-name>backBeanData</managed-bean-name>
    <managed-bean-class>br.com.meindica.backbean.BackBeanData</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>contacts</property-name>
        <value>#{contacts}</value>
    </managed-property>
</managed-bean>

[/code]

E por enquanto meu html com os facelets é o seguinte:

[code]<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>

Cadastro de contatos

Person data

        <h2>Contact data</h2>
        <h:panelGrid columns="2">
           <h:outputLabel value="Type Phone: " for="type_fone" /><h:inputText value="#{contacts[2].typePhone}" id="type_fone" />
           <h:outputLabel value="DDD: " for="ddd" /><h:inputText value="#{contacts[2].ddd}" id="ddd" />
           <h:outputLabel value="Phone: " for="Phone" /><h:inputText value="#{contacts[2].phone}" id="Phone" />
           <h:commandButton action="#{backBeanData.save}" value="Save" />             
        </h:panelGrid>
         
    </h:form>
</f:view>
[/code]

Mas quando eu executo esse código recebo a seguinte stack

[quote]May 7, 2008 1:28:22 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /signup.jsp(24,69) ‘#{contacts[2].typePhone}’ Target Unreachable, ‘2’ returned null
org.apache.jasper.el.JspPropertyNotFoundException: /signup.jsp(24,69) ‘#{contacts[2].typePhone}’ Target Unreachable, ‘2’ returned null
at org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:129)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:936)
at javax.faces.component.UIInput.validate(UIInput.java:861)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1071)
at javax.faces.component.UIInput.processValidators(UIInput.java:663)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1040)
at javax.faces.component.UIForm.processValidators(UIForm.java:229)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1040)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:667)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
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 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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
May 7, 2008 1:28:22 PM com.sun.faces.lifecycle.LifecycleImpl phase
WARNING: executePhase(PROCESS_VALIDATIONS 3,com.sun.faces.context.FacesContextImpl@1958cc2) threw exception
javax.faces.FacesException: /signup.jsp(24,69) ‘#{contacts[2].typePhone}’ Target Unreachable, ‘2’ returned null
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:108)
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 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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /signup.jsp(24,69) ‘#{contacts[2].typePhone}’ Target Unreachable, ‘2’ returned null
at org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:129)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:936)
at javax.faces.component.UIInput.validate(UIInput.java:861)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1071)
at javax.faces.component.UIInput.processValidators(UIInput.java:663)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1040)
at javax.faces.component.UIForm.processValidators(UIForm.java:229)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1040)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:667)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
… 15 more
[/quote]

Bom pessoal espero que alguém possa me ajudar fico muito grato

cara
eu lembro que recebi uma vez esse erro, se nao me engano ou era por que eu estava acessando um objeto que era privado ou se o objeto nao estava instanciado!
nao posso te dar certeza, mas era algo desse tipo.

outra coisa que pode estar acontecendo, se for o seu codigo estiver fazendo o que pensei, é, como vc usou o [N] ele o rornou o array certo?
pode ser que nao exista o registro de numero 2 no array?
tente usar com 0 e veja oq acontece

outra coisa

[code]# <h:outputLabel value=“Type Phone: " for=“type_fone” /><h:inputText value=”#{contacts[2].typePhone}" id=“type_fone” />

<h:outputLabel value=“DDD: " for=“ddd” /><h:inputText value=”#{contacts[2].ddd}" id=“ddd” />

<h:outputLabel value=“Phone: " for=“Phone” /><h:inputText value=”#{contacts[2].phone}" id=“Phone” /> [/code]

po curiosidade, na parte “contacts[2].phone” o 2 seria o numero do array mesmo, como eu pensei?

falow
T+

Então cara o 2 é sim da posição do array … eu coloquei o 2 pois no backbean eu adicionou mais 2 elementos na arraylist …

Quando eu coloquei o zero o erro foi o mesmo …

Mim não aprende, mim ser pele vermelha?