Date JSF Facelets [RESOLVIDO]

18 respostas
T

eu to tentando passar uma data assim

####na entidade:

@Column(name=dth_data_atual)

public Date data;

public Date getData() {

return data;

}
public void setData(Date data) {
	this.data = data;
}

####no xhtml:

Data:

<h:message for=“data” errorClass=“error2” />
<h:inputText id=“data”
value="#{controlePatrimonio.patrimonio.data}" required=“true”
requiredMessage=" *POR FAVOR, INFORME A DATA ATUAL!" />

Ae na hr que cadastro lá … que insiro a data ele retorna como mensagem de erro…

/cadastroPatrimonio.xhtml @44,62 value="#{controlePatrimonio.patrimonio.data}": javax.faces.el.EvaluationException: Exception setting property data of base with class br.ce.cge.patrimonio.entidades.Patrimonio

alguém saberia me ajudar?
valeu

18 Respostas

J

Coloca o converter pra date dentro do teu input! :smiley:

T

eu tinha testado assim, mas voltou com o mesmo erro!
lá na entidade eu to importando a biblioteca java.sql.Date;

Data:

<h:message for=“data” errorClass=“error2” />
<h:inputText id=“data”
value="#{controlePatrimonio.patrimonio.data}" required=“true”
requiredMessage=" *POR FAVOR, INFORME A DATA ATUAL!">
<f:convertDateTime type=“date” pattern=“dd/MM/yyyy” />
</h:inputText>
J
thiago_vf:
eu tinha testado assim, mas voltou com o mesmo erro! lá na entidade eu to importando a biblioteca java.sql.Date;
<td>Data:<br />
<h:message for="data" errorClass="error2" /> </td>
<td><h:inputText id="data" value="#{controlePatrimonio.patrimonio.data}"  required="true" requiredMessage=" *POR FAVOR, INFORME A DATA ATUAL!">
<f:convertDateTime type="date" pattern="dd/MM/yyyy" />
</h:inputText>
</td>

Testa soh assim

<f:convertDateTime pattern="dd/MM/yyyy" />
T

pois eh…tb já testei soh assim…

:T

J

Posta o codigo inteiro da tua pagina e do teu managedBean e poste ele em formato de codigo pra dar uma olhada! :smiley:

T
blz..esse primeiro eh a entidade..
package br.ce.cge.patrimonio.entidades;

import java.sql.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;



@Entity
@Table(name="patrimonio.tb_patrimonio")
public class Patrimonio {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="isn_patrimonio")
	public int id;
	
	@ManyToOne
	@JoinColumn(name="isn_produto", referencedColumnName="isn_produto")
	public Produto produto;
	
	@Column(name="num_tombo")
	public int tombo;
	
	@Column(name="dsc_serial")
	public String serial;
	
	@Column(name="isn_setor")
	public String setor;
	
	@Column(name="isn_funcionario")
	public int funcionario;
	
	@Column(name="dth_data_atual")
	public Date data;
	
	@Column(name="dsc_nota_fiscal")
	public String notaFiscal;
	
	@Column(name="dsc_observacao")
	public String observacao;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public int getTombo() {
		return tombo;
	}

	public void setTombo(int tombo) {
		this.tombo = tombo;
	}

	public String getSerial() {
		return serial;
	}

	public void setSerial(String serial) {
		this.serial = serial;
	}

	public String getSetor() {
		return setor;
	}

	public void setSetor(String setor) {
		this.setor = setor;
	}

	public int getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(int funcionario) {
		this.funcionario = funcionario;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getNotaFiscal() {
		return notaFiscal;
	}

	public void setNotaFiscal(String notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	
	/*@OneToOne
	@JoinColumn(name="isn_situacao", referencedColumnName="isn_situacao")
	public Situacao situacao;*/ 
	
	/*@ManyToOne
	@JoinColumn(name="isn_pessoa_juridica", referencedColumnName="usuario.tb_pessoa_juridica.isn_pessoa_juridica")
	public*/
	
	
}

esse segundo é o controle...

package br.ce.cge.patrimonio.controle;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.ce.cge.patrimonio.entidades.Patrimonio;
import br.ce.cge.patrimonio.entidades.Produto;
import br.ce.cge.patrimonio.exception.PatrimonioInvalidoException;
import br.ce.cge.patrimonio.fabrica.IFabricaPatrimonio;
import br.ce.cge.patrimonio.fabrica.IFabricaProduto;
import br.ce.cge.patrimonio.repositorio.IRepositorioProduto;

@Controller("controlePatrimonio")
@Scope("session")
public class ControlePatrimonio {

	private Patrimonio patrimonio;
	
	private Produto produto;
	
	private int aux;
	
	@SuppressWarnings("unchecked")
	private List listaPatrimonio;
	
	@Resource
	private IFabricaPatrimonio fabricaPatrimonio;
	
	@Resource
	private IFabricaProduto fabricaProduto;
	
	public String novo(){
		patrimonio = fabricaPatrimonio.criar();
		return "cadastroPatrimonio";
	}
	
	public String editar(){
		return "cadastroPatrimonio";
	}
	
	@SuppressWarnings("unchecked")
	public List<Patrimonio> getTodos(){
		if(listaPatrimonio==null){
			setListaPatrimonio(fabricaPatrimonio.obterTodos());
		}
		return getListaPatrimonio();
	}

	@SuppressWarnings("unchecked")
	public String salvar(){
		try{
			if(getPatrimonio().getProduto()==null){
				passa(aux);
				getPatrimonio().setProduto(produto);
			}
			fabricaPatrimonio.salvar(getPatrimonio());
			getListaPatrimonio().remove(getPatrimonio());
			getListaPatrimonio().add(getPatrimonio());
		} catch (PatrimonioInvalidoException e){
			FacesContext contexto = FacesContext.getCurrentInstance();
			FacesMessage mensagem = new FacesMessage("Patrimônio invalido!");
			contexto.addMessage("cadastroPatrimonio", mensagem);
			return null;
		}
		return "listaPatrimonio";
	}
	
	public void passa(int id){
		setProduto(fabricaProduto.obterProdutoPorId(id));
	}
	
	public String excluir(){
		fabricaPatrimonio.excluir(getPatrimonio());
		getListaPatrimonio().remove(getPatrimonio());
		return "listaPatrimonio";
	}
	
	public int getAux() {
		return aux;
	}

	public void setAux(int aux) {
		this.aux = aux;
	}

	
	public Produto getProduto(){
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public Patrimonio getPatrimonio(){
		return patrimonio;
	}
	
	public void setPatrimonio(Patrimonio patrimonio){
		this.patrimonio = patrimonio;
	}
	
	@SuppressWarnings("unchecked")
	private List<Patrimonio> getListaPatrimonio() {
		return listaPatrimonio;
	}
	
	@SuppressWarnings("unchecked")
	private void setListaPatrimonio(List listaPatrimonio) {
		this.listaPatrimonio=listaPatrimonio;
	}
	
	public List<SelectItem> SelectItems;
	
	@Resource
	private IRepositorioProduto repositorioProduto;
	
	
	
	public List getSelectItems(){
		List<Produto> list = repositorioProduto.obterTodos();           
		SelectItems = new ArrayList();
		for(Produto produto : list){  
			SelectItem si = new SelectItem();
			//String label = produto.getNome() + produto.getDescricao();
			si.setLabel(produto.getNome() + " - " + produto.getDescricao());  
			si.setValue(produto.getId());
			SelectItems.add(si);     
		}        
		this.SelectItems = SelectItems;
		return SelectItems;  
	}
	
	
}

e por ultimo a view .. !
ainda tem a parte de repositório (quem se comunica com o banco) e a fábrica .. mas acho que esses dois nao sao necessarios..!

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:c="http://java.sun.com/jstl/core"
	xmlns:t="http://myfaces.apache.org/tomahawk"
	xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
	template="/templates/template.xhtml">

	<ui:define name="title">PatrimonioWeb</ui:define>
	<ui:define name="body">
		<br />

		<h:form>
			<h:dataTable value="#{controlePatrimonio.todos}" var="patrimonio" />
			<table class="formulario">
				<tr>
					<td class="hed" colspan="2">Informe os dados do Patrimonio</td>
				</tr>
				<tr>
					<td>Tombo:<br />
					<h:message for="tombo" errorClass="error2" /></td>
					<td><h:inputText id="tombo" type="text"
						value="#{controlePatrimonio.patrimonio.tombo}" required="true"
						requiredMessage=" *POR FAVOR, INFORME O TOMBO DO PRODUTO!" /></td>
				</tr>
				<tr>
					<td>Serial:<br />
					<h:message for="serial" errorClass="error2" /></td>
					<td><h:inputText id="serial" type="text"
						value="#{controlePatrimonio.patrimonio.serial}" /></td>
				</tr>
				<tr>
					<td>Setor:<br />
					<h:message for="setor" errorClass="error2" /></td>
					<td><h:inputText id="setor" type="text"
						value="#{controlePatrimonio.patrimonio.setor}" required="true"
						requiredMessage=" *POR FAVOR, INFORME O SETOR EM QUE O PRODUTO ESTÁ!" /></td>
				</tr>
				<tr>
					<td>Data:<br />
					<h:message for="data" errorClass="error2" /></td>
					<td><h:inputText id="data"
						value="#{controlePatrimonio.patrimonio.data}" required="true"
						requiredMessage=" *POR FAVOR, INFORME A DATA ATUAL!">
						<f:convertDateTime type="date" pattern="dd/MM/yyyy" />
					</h:inputText></td>
				</tr>
				<tr>
					<td>Produto:</td>
					<td><h:selectOneListbox id="nome" style="width: 135px"
						size="1" value="#{controlePatrimonio.aux}">
						<f:selectItems value="#{controlePatrimonio.selectItems}" />
					</h:selectOneListbox><br />
					</td>
				</tr>
				<tr>
					<td><h:commandButton action="#{controlePatrimonio.salvar}"
						value="Salvar" /></td>
				</tr>

			</table>
		</h:form>
	</ui:define>
</ui:composition>

valeu!!

J

Está usando hibernate né??

Por um acaso não devia estar encima da tua coluna de data um

@Temporal(TemporalType.Date)

??

E você esta inserindo tbm o valor 11/11/2009 por exemplo? O valor informado está seguindo o correto né?

T

tava faltando mesmo essa annotation só que ele da esse erro:
[color=red]Caused by: org.hibernate.AnnotationException: @Temporal should be set on a java.util.Date or java.util.Calendar property: br.ce.cge.patrimonio.entidades.Patrimonio.data[/color]
dei uma olhada aqui… mudei a biblioteca que ele importa de java.sql.date para java.util.date … ai ele passa a dar o erro dizendo que estorou o tamanho do campo …
[color=red]Caused by: javax.faces.el.EvaluationException: java.sql.SQLException: ERROR: numeric field overflow[/color=red]

J

thiago_vf:
tava faltando mesmo essa annotation só que ele da esse erro:
[color=red]Caused by: org.hibernate.AnnotationException: @Temporal should be set on a java.util.Date or java.util.Calendar property: br.ce.cge.patrimonio.entidades.Patrimonio.data[/color]
dei uma olhada aqui… mudei a biblioteca que ele importa de java.sql.date para java.util.date … ai ele passa a dar o erro dizendo que estorou o tamanho do campo …
[color=red]Caused by: javax.faces.el.EvaluationException: java.sql.SQLException: ERROR: numeric field overflow[/color=red]

E no banco tu tem certeza que teu campo como do tipo date?

T

Tenho sim, no banco ta
dth_data_atual date,

to usando o postgre

J

Tenta debuga tua aplica;áo e ver o que ta acontecendo e onde ela ta dando o erro! onde que na tua aplicação esta dando esse erro!

é uma coisa que eu pensaria :thumbup:

T

ok.
achei aqui que ele ta passando a data no formato completo, mesmo eu usando o convertDateTime

<f:convertDateTime type="date" dateStyle="short" pattern="dd/MM/yyyy" />

botei pra ele imprimir a data e ele passa assim
Mon Dec 10 21:00:00 BRT 2012 quando eu queria que fosse soh assim 10/12/2012

T

não existe um jeito de converter o formato já na entrada sem ter que criar um método no bean pra converter?

J

Tenta colocar o dataPattern no lugar do dataStyle e roda…

nao me lembro se tinha um esquema assim

mais no meu rolava de boa antes

é que depois começei a usar o rich:Calendar e dai nem precisava em me preocupar com isso!! hehe

:smiley:

T

Cara!!
o problema nao estava na data! hehehe
valeu a atençao … foi amadorismo meu. problema tava no formato de outro campo do banco … agora ta dando certo, inclusive o formato que eh inserido no postgre eh o dd/MM/yyyy
valeu!!

J

De nada

:smiley: :smiley:

Coloca resolvido no topico!

M

Meus caros…

Estou com o mesmo problema…
Qual foi a solução adotada?

Marcus

M

Como você converteu a data para o formato dd/MM/yyyy ?

Criado 14 de dezembro de 2009
Ultima resposta 4 de jan. de 2011
Respostas 18
Participantes 3