Mais uma sobre JSF Select + Hibernate

2 respostas
paulloestevam

Amigos,

Estou postando porque não consigo enxergar o erro. Não consigo “salvar” o valor deste SelectOneMenu gerado a partir de uma consulta hibernate.
Ele até exibe os itens no select, mas quando clico no botão Salvar, ele não cadastra. No console, aparece uma consulta do hibernta. E só.

A entidade é Cartão, e cada Cartão possui um Cliente. Na tela de Cadastro de Cartão, aparece a lista com todos os clientes, daí devo selecionar um e continuar o cadastro.

Vejam o código:

@Entity
public class Cartao {
	@Id
	@GeneratedValue
	private int id;

	private String numero;
	private int tipoCartao;
	private Date dataEmissao;
	private Date dataValidade;
	private Date dataVencimento;
	private double limite;
	private boolean valido;

	@ManyToOne
	private Cliente cliente;

	public Cartao() {
		super();
	}

//construtor e getters e setters

No JSP:

<h:panelGrid columns="3">
			<h:outputText value="Selecione o cliente: " />
			<h:selectOneMenu id="cliente" value="#{cartaoBean.idCliente}">
				<f:selectItems value="#{cartaoBean.listaClientes}" />
			</h:selectOneMenu>
			<h:message for="cliente" style="color: darkred" />

//outros itens

		</h:panelGrid>
		<h:commandButton action="#{cartaoBean.salvar}" value="Salvar"  />

Agora o ManagedBean:

public class CartaoBean {
	private Cartao cartao = new Cartao();
	private Cliente cliente = new Cartao();
	private List<Cliente> listaClientes = new ArrayList<Cliente>();
	private int idCliente;


	public String salvar() {
		System.out.println("PONTO &&&&&&&&&&&&&&&&&&&&&&&&");

		Session s = HibernateUtil.getSession();
		Transaction t = s.beginTransaction();

		for (Cliente c : listaClientes) {
			if (c.getId() == this.idCliente) {
				this.cliente = c;
			}
		}

		cartao.setCliente(cliente);
		s.save(cartao);
		t.commit();
		s.close();

		cartao = new Cartao();
		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage("Cadastro de cartão efetuado com sucesso"));

		return "salvar";
	}


	public Cartao getCartao() {
		return cartao;
	}

	public void setCartao(Cartao cartao) {
		this.cartao = cartao;
	}

	public List<SelectItem> getListaClientes() {
		Session s = HibernateUtil.getSession();
		Transaction t = s.beginTransaction();
		Query q = s.createQuery("from Cliente");
		List<Cliente> listaCliente = q.list();
		s.close();

		List<SelectItem> listaSelectCliente = new ArrayList<SelectItem>();
		for (Cliente c : listaCliente) {
			listaSelectCliente.add(new SelectItem(c.getId(), c.getNome()));
		} 

		return listaSelectCliente;

	}

	public int getIdCliente() {
		return idCliente;
	}

	public void setIdCliente(int idCliente) {
		this.idCliente = idCliente;
	}

}

O getListaClientes() faz ok, porque os nomes dos clientes aparecem no Select.
O pró é quando clico em Salvar… no console nem aparece o “PONTO &&&&&…”, só um trecho selectdo hibernate.

O que pode estar acontecendo?

valeu

2 Respostas

DirceuSobrinho

Se não aparece “PONTO &&&&&…”, então não está entrando no método: public String salvar();

algo q pode está ocorrendo é algum error de conversão ou de validação…

nos h:message ou h:messages não exibem nada?

declare no commandButton immediate=“true” só para checar se é validação ou conversão de algo, se mostrar no console: “PONTO &&&&&…” é pq é!

paulloestevam

Opa, funcionou!

Era exatamente um input de data que eu tinha.
Não sabia que tinha que usar um ConvertDateTime. Errinho difícil de se achar… valeu.

Criado 30 de novembro de 2008
Ultima resposta 30 de nov. de 2008
Respostas 2
Participantes 2