Como usar um POJO no selectOneMenu sem o converter

Como usar um POJO no selectOneMenu sem o converter

java
java
Aqui está um exemplo de como usar um POJO no selectOneMenu sem o converter. Assim, a gente economiza uma classe e já faz as associações no controlador, usando diretamente os objetos do JPA.


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:p="http://primefaces.org/ui">

<h:head>
  <title>e-commerce</title>

  <style>
.ui-widget,.ui-widget .ui-widget .ui-panel-title {
  font-size: 90% !important;
}
</style>
</h:head>

<h:body>
  <h:form>
    <p:messages id="messages" />

    <p:spacer height="6px" />

    <p:panel header="Produto" style="margin-left: 30%; margin-right: 30%;">
      <p:panelGrid columns="2">

        <p:outputLabel value="Nome:" />
        <p:inputText value="#{categoriaBean.categoria.nome}" />

        <p:outputLabel value="Categoria:" />
        <p:selectOneMenu value="#{categoriaBean.categoria.id}">
          <f:selectItems value="#{categoriaBean.categorias}" var="item"
            itemLabel="#{item.nome}" itemValue="#{item.id}" />
        </p:selectOneMenu>

      </p:panelGrid>

      <f:facet name="footer">
        <p:commandButton value="Salvar" ajax="false" icon="ui-icon-disk" />
      </f:facet>
    </p:panel>

  </h:form>

</h:body>

</html>


package net.marcoreis.ecommerce.controller;

import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.EntityManager;

import net.marcoreis.ecommerce.entidades.Categoria;
import net.marcoreis.ecommerce.util.JPAUtil;

@ManagedBean
@RequestScoped
public class CategoriaBean {
    private Categoria categoria;
    private Collection<categoria> categorias;

    public void setCategoria(Categoria categoria) {
  this.categoria = categoria;
    }

    public Categoria getCategoria() {
  return categoria;
    }

    @PostConstruct
    public void init() {
  categoria = new Categoria();
  carregarCategorias();
    }

    public void carregarCategorias() {
  EntityManager em = JPAUtil.getInstance().getEntityManager();
  categorias = em.createQuery("from Categoria").getResultList();
  em.close();
    }

    public Collection<categoria> getCategorias() {
  return categorias;
    }
}

3 thoughts on “Como usar um POJO no selectOneMenu sem o converter

  1. Cara, você testou este código? Ele só faz estar o ID no objeto e pronto, não recupera automaticamente o objeto. Isso não substitui a função do converter.

    1. A idéia era recuperar apenas o ID mesmo, Benzemá. Às vezes é melhor usar apenas o ID, mas realmente não substitui o converter nesse sentido que você falou.

Leave a Reply

Your email address will not be published. Required fields are marked *