[Resolvido] Há necessidade de inicializar um campo Calendar no JSF?

Bom dia/tarde/noite/madrugada povo!

Meu primeiro tópico aqui no guj… :smiley:

Estou desenvolvendo minha primeira aplicação JSF, então já sabem né?!, se a resposta for simples, respondam com moderação! hehe :stuck_out_tongue:

Estou utilizando JSF 2, JPA 2, Hibernate 3.5.2, Primefaces 2.2, MySQL 5.1 e Tomcat 7.

A situação é a seguinte:

Associado.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false, length = 14)
private String cpf;
@Column(length = 80, nullable = false)
private String nome;
@Temporal(TemporalType.DATE)
private Calendar dataNascimento;

// getters and setters omitidos

adicionarAssociado.xhtml

<h:panelGrid columns="2">
        <h:outputText value="CPF:" />
        <h:inputText id="cpf" styleClass="cpf" value="#{associadoBean.associadoSelecionado.cpf}" required="true" requiredMessage="O campo CPF é obrigatório!" />
        <h:outputText value="Nome:" />
        <h:inputText id="nome" value="#{associadoBean.associadoSelecionado.nome}" required="true" requiredMessage="O campo Nome é obrigatório!" />
	<h:outputText value="Data de nascimento:" />
	<h:inputText id="dataNascimento" styleClass="data" value="#{associadoBean.associadoSelecionado.dataNascimento.time}">
	       <f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{initParam.timezone}"/>
	</h:inputText>
</h:panelGrid>
<h:commandButton action="#{associadoBean.inserirAssociado}" value="Salvar" />

Quando vou adicionar um asssociado, dá o seguinte erro:

exception

javax.servlet.ServletException: javax.el.PropertyNotFoundException: /cadastro/associado/adicionarAssociado.xhtml @20,124 value="#{associadoBean.associadoSelecionado.dataNascimento.time}": Target Unreachable, 'dataNascimento' returned null
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

Acredito que seja devido ao fato de o atributo dataNascimento da classe Associado.java não ter sido instanciado (inicializado), pois quando coloco:

private Calendar dataNascimento = Calendar.getInstance();

O sistema insere sem problemas, porém, coloca a data atual no meu h:inputText, daí preciso apagar a data pra inserir a data de nascimento correta.

Então, como fazer para que o campo Data de nascimento do fomulário de cadastro seja exibido vazio (sem qualquer data), para que, dessa forma, na hora de inserir a data de nascimento, o usuário do sistema não precise apagar a data atual?

Obrigado!

Vc não pode instanciar um objeto da classe Calendar pois ela é abstrata…axo o q acontece é q esse atributo seu não está anotado…coloque @Column, pq o erro lah fala q naum existe a property dataNascimento pq ele naum está mapeado, axo q é isso…

Opa!

valeu pela resposta luxu!

Coloquei a anotação @Column mas não funcionou!

Obrigado pela ajuda!

Abraço.

Pessoal, consegui resolver o problema.

Na classe Associado.java, mudei o tipo do atributo dataNascimento de Calendar para Date e, na página adicionarAssociado.xhtml, mudei a tag

<h:inputText id="dataNascimento" styleClass="data" value="#{associadoBean.associadoSelecionado.dataNascimento.time}">
	<f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{initParam.timezone}"/>
</h:inputText>

para

<h:inputText id="dataNascimento" styleClass="data" value="#{associadoBean.associadoSelecionado.dataNascimento}">
	<f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{initParam.timezone}"/>
</h:inputText>

Agora está funcionando!