1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema leitura de tabela com f:selectItems - Primefaces

Boa noite pessoal,

Estou com um pequeno problema na leitura dos dados contidos em uma tabela dentro de um selectOneMenu, ele não está retornando nada dentro menu de seleção criado.

Creio que o problema esteja nesta parte do código:

<!-- Laço com seleção dos modelos já cadastrados no banco -->
                <p:outputLabel value="Modelo:" />
                <p:selectOneMenu value="Modelo.modeloSelecionado">
                    <f:selectItem itemLabel="Selecione" itemValue="0"></f:selectItem>
                    <f:selectItems value="#{ProdutoMB.modelos}" var="modelo"
                        itemLabel="#{modelo.nome}" itemValue="#{modelo.id}">
                    </f:selectItems>
                </p:selectOneMenu>

Segue o ManagedBean:

package eletronica.controle;

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

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import eletronica.dao.ModeloDAO;
import eletronica.dao.ProdutoDAO;
import eletronica.entidades.Modelo;
import eletronica.entidades.Produto;

@ManagedBean
@ViewScoped
public class ProdutoMB {

    Produto produto = new Produto();

    private ProdutoDAO produtoDAO = new ProdutoDAO();

    // Cria um array de produtos (será utilizado no método excluir)
    private List<Produto> produtos = new ArrayList<Produto>();

    // variável que vai armazenar as mensagens
    private List<Produto> listaProdutos;

    // Guarda a lista de modelos que será mostrada no xhtml
    private List<Modelo> modelos;

    // Guarda o ID do modelo selecionado na tela
    private Integer modeloSelecionado;

    @PostConstruct
    public void inicializa() {

        System.out.println("Iniciou ProdutoMB");

        // Carrega todas os produtos do banco
        ProdutoDAO dao = new ProdutoDAO();
        listaProdutos = dao.listarProdutos();

        // Carrega todos os modelos do banco
        ModeloDAO dao2 = new ModeloDAO();
        modelos = dao2.listarModelos();

    }

    public void salvar() {

    }

    public List<Produto> getListaProdutos() {
        return listaProdutos;
    }

    public void setListaProdutos(List<Produto> listaProdutos) {
        this.listaProdutos = listaProdutos;
    }

    public Produto getProduto() {
        return produto;
    }

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

    public ProdutoDAO getProdutoDAO() {
        return produtoDAO;
    }

    public void setProdutoDAO(ProdutoDAO produtoDAO) {
        this.produtoDAO = produtoDAO;
    }

    public List<Modelo> getModelos() {
        return modelos;
    }

    public void setModelos(List<Modelo> modelos) {
        this.modelos = modelos;
    }

    public Integer getModeloSelecionado() {
        return modeloSelecionado;
    }

    public void setModeloSelecionado(Integer modeloSelecionado) {
        this.modeloSelecionado = modeloSelecionado;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

}

Segue o .xhtml:

<?xml version="1.0" encoding="UTF-8" ?>
<!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:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Principal</title>
    <link rel="stylesheet" type="text/css" href="estilo.css" />
</h:head>
<h:body>
    <h:form>
        <p:menubar style="margin-bottom:5px">
            <p:menuitem value="Início" icon="ui-icon-home" url="principal.xhtml" />
            <p:submenu label="Orçamentos" icon="ui-icon-clipboard"
                url="orcamentos.xhtml" />
            <p:submenu label="Ordens de Serviço" icon="ui-icon-clipboard"
                url="ordens_servico.xhtml" />
            <p:submenu label="Cadastros Gerais" icon="ui-icon-folder-open"
                url="#">
                <p:menuitem value="Produtos" url="produtos.xhtml" />
                <p:menuitem value="Modelos" url="modelos.xhtml" />
                <p:menuitem value="Serviços" url="servicos.xhtml" />
                <p:menuitem value="Funcionários" url="funcionarios.xhtml" />
            </p:submenu>
            <p:menuitem value="Usuários" icon="ui-icon-person"
                url="usuarios.xhtml" />
            <p:menuitem icon="ui-icon-power" url="#s" />
        </p:menubar>
    </h:form>

    <!-- Formulário que contém a tabela que fará a listagem dos produtos cadastrados -->
    <h:form>
        <p:dataTable var="produto" value="#{produtoMB.listaProdutos}">
            <f:facet name="header">Produtos</f:facet>
            <p:row rendered="Produtos">Produtos</p:row>
            <p:column headerText="ID">
                <h:outputText value="#{produto.id}" />
            </p:column>
            <p:column headerText="Descrição">
                <h:outputText value="#{produto.descricao}" />
            </p:column>
            <p:column headerText="Observação">
                <h:outputText value="#{produto.observacao}" />
            </p:column>
            <p:column headerText="Valor">
                <h:outputText value="#{produto.valor}" />
            </p:column>
            <p:column headerText="Situação">
                <h:outputText value="#{produto.situacao}" />
            </p:column>
            <p:column headerText="Modelo">
                <h:outputText value="#{produto.modelo.nome}" />
            </p:column>
        </p:dataTable>


        <!-- Dialog para inclusão de novo produto -->
        <p:commandButton id="adicionar_usuario" value="Adicionar"
            onclick="PF('adicionar').show();" type="button" ajax="true"
            style="margin-left:50%; margin-top:20%" update=":dialog:novo_usuario"/>

        <p:dialog id="novo_usuario" header="Novo usuário" widgetVar="adicionar"
            resizable="true" modal="true" draggable="false">

            <h:panelGrid columns="2">
                <p:outputLabel value="Descrição:" />
                <p:inputText value="#{ProdutoMB.produto.descricao}" />
                <p:outputLabel value="Observação:" />
                <p:inputText value="#{ProdutoMB.produto.observacao}" />
                <p:outputLabel value="Valor:" />
                <p:inputText value="#{ProdutoMB.produto.valor}" />

                <!-- Laço com seleção dos modelos já cadastrados no banco -->
                <p:outputLabel value="Modelo:" />
                <p:selectOneMenu value="Modelo.modeloSelecionado">
                    <f:selectItem itemLabel="Selecione" itemValue="0"></f:selectItem>
                    <f:selectItems value="#{ProdutoMB.modelos}" var="modelo"
                        itemLabel="#{modelo.nome}" itemValue="#{modelo.id}">
                    </f:selectItems>
                </p:selectOneMenu>

                <p:outputLabel value="Situação:" />
                <p:selectOneMenu value="#{ProdutoMB.produto.situacao}">
                    <f:selectItem itemLabel="Ativo" itemValue="true" />
                    <f:selectItem itemLabel="Inativo" itemValue="false" />
                </p:selectOneMenu>
            </h:panelGrid>

        </p:dialog>


    </h:form>

</h:body>
</html>

Segue a print mostrando como a listagem está aparecendo no dialog: https://www.filepicker.io/api/file/vez2il7tRxqkCA1F9bdR

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags primefaces xhtml select ou faça a sua própria pergunta.