Listar produtos de um determinado fornecedor

Pessoal, sou novo por aqui, então já peço desculpas caso faça algo errado…

Estou com uma duvida de como listar apenas os produtos de um Fornecedor selecionando esse Fornecedor através de um SelectOneMenu.

Preciso do xhtml e da função que vai fazer isso tbm. Tentei de alguns jeitos mas não tive sucesso, imagino que não seja algo complicado, porém sou um pouco inexperiente ainda.

Obrigado!

Precisa mostrar uma das tentativas, para que possamos ajudar

1 curtida

consegui recuperar o ultimo, porem ele lista tudo e nao so o que eu queria filtrar com o fornecedor.

XHTML
<ui:define name=“conteudo”>

	<p:commandButton value="Fornecedor"
		actionListener="#{MBDoacoes.prepararNovo()}"
		oncomplete="PF('dlgforn').show();" update=":frmfor:pnforn" />


	<p:dialog widgetVar="dlgforn" closable="false" draggable="false"
		resizable="false" header="Fornecedor" modal="true"
		appendTo="@(body) ">
		<h:form id="frmfor">
			<h:panelGrid id="pnforn" columns="4">
				<p:outputLabel value="Selecione um Fornecedor: *" />
				<p:selectOneMenu value="#{MBDoacoes.doacoes.fornecedores.codigo}">
					<f:selectItem itemValue="" itemLabel="Selecione um Fornecedor" />
					<f:selectItems value="#{MBDoacoes.comboFornecedores}" var="item"
						itemValue="#{item.codigo}" itemLabel="#{item.nome}">
					</f:selectItems>
				</p:selectOneMenu>


			</h:panelGrid>

			<h:panelGrid columns="2">
				<p:commandButton value="Selecionar"
					oncomplete="PF('dlgforn').hide();" update=":frmdoacoes" />
				<p:commandButton value="Cancelar" onclick="PF('dlgforn').hide();" />

			</h:panelGrid>

		</h:form>
	</p:dialog>

	<h:form id="frmdoacoes">

		<p:dataTable id="tbdoacoes" emptyMessage="Nenhum registro encontrado"
			value="#{MBDoacoes.produtos}" var="produto"
			filteredValue="#{MBFornecedores.fornecedores.codigo}" paginator="true"
			rows="4">

			<f:facet name="header">Lista de Produtos</f:facet>

			<p:column headerText="Nome do produto">
				<h:outputText value="#{produto.descricao}" />
			</p:column>
			<p:column headerText="Preço">
				<h:outputText value="#{produto.valor}" />
			</p:column>
			<p:column headerText="Fornecedor">
				<h:outputText value="#{produto.fornecedores.nome}" />
			</p:column>

			<p:column headerText="Opções">
				<p:commandButton icon="ui-icon-plus"
					actionListener="#{MBDoacoes.adicionar(produto)}"
					update=":frmdoacoes:tbCarrinho :frmdoacoes:txtDoaValorTotal">
				</p:commandButton>
			</p:column>

		</p:dataTable>



		<p:separator />
		<p:separator />
		<p:separator />

		<p:dataTable id="tbCarrinho" emptyMessage=""
			value="#{MBDoacoes.itens}" var="itens" paginator="true" rows="4">

			<f:facet name="header"> Carrinho da doação </f:facet>

			<p:column headerText="Descrição">
				<h:outputText value="#{itens.produtos.descricao}" />
			</p:column>

			<p:column headerText="Valor">
				<h:outputText value="#{itens.valor_parcial}" />
			</p:column>

			<p:column headerText="Quantidade">
				<h:outputText value="#{itens.quantidade}" />
			</p:column>
			<p:column headerText="Fornecedor">
				<h:outputText value="#{itens.produtos.fornecedores.nome}" />
			</p:column>

			<p:column headerText="Opções">
				<p:commandButton icon="ui-icon-close"
					actionListener="#{MBDoacoes.remover(itens)}"
					update=":frmdoacoes:tbCarrinho :frmdoacoes:txtDoaValorTotal">
				</p:commandButton>
			</p:column>

		</p:dataTable>

		<p:separator />

		<h:panelGrid>

			<h:outputText id="txtDoaValorTotal"
				value="Valor Total: #{MBDoacoes.doacoes.valor_total} " />
			<p:commandButton value="Finalizar Doação"
				onclick="PF('dlgFinDoacao').show()" />
		</h:panelGrid>
	</h:form>

	<p:dialog closable="false" draggable="false" modal="true"
		resizable="false" header="Finalizar Doação" widgetVar="dlgFinDoacao"
		appendTo="@(body)">

		<h:form>
			<h:panelGrid>
				<h:outputText value="Horário" />
				<h:outputText value="Doador" />
				<h:outputText value="Intituição" />
				<h:outputText value="Fornecedor" />
				<h:panelGrid columns="2">
					<p:commandButton value="Finalizar Doação" />
					<p:commandButton value="Voltar"
						onclick="PF('dlgFinDoacao').hide()" />
				</h:panelGrid>
			</h:panelGrid>
		</h:form>

	</p:dialog>

</ui:define>

</ui:composition>

metodo para selecionar o fornecedor

public void selecionaFornecedor() {
	
	try {
	Connection conexao = ConexaoFactory.conectar();

	StringBuilder sql = new StringBuilder();
	sql.append("SELECT * FROM produtos WHERE fornecedores_codigo = ?");

	PreparedStatement stmt = conexao.prepareStatement(sql.toString());

	stmt.setInt(1, getCodforn());

	ResultSet rs = stmt.executeQuery();
	
	if (rs.next()){
		forn = rs.getInt("fornecedores_codigo");
		ProdutosDAO pdao = new ProdutosDAO();
		pdao.buscarPorFornecedores(codforn); }
	} catch (SQLException e) {
		JSFUtil.addMsgErro("ex.getMessage()");
		e.printStackTrace();
	}
}

}

Pessoal, consegui !!
Vou postar como ficou.

método que chama a função da DAO:

public void selecionaFornecedor() {
	try {
		doacoes = new Doacoes();
		ProdutosDAO pdao = new ProdutosDAO();
		produtosFiltrados = pdao.buscaPorFornecedores(codforn);
	} catch (SQLException e) {
		JSFUtil.addMsgErro("ex.getMessage()");
		e.printStackTrace();
	}
}

Função DAO:

public ArrayList<Produtos> buscaPorFornecedores(int p) throws SQLException {
	StringBuilder sql = new StringBuilder();
	sql.append("SELECT * ");
	sql.append("FROM produtos ");
	sql.append("WHERE fornecedores_codigo = ? ");

	Connection conexao = ConexaoFactory.conectar();

	PreparedStatement comando = conexao.prepareStatement(sql.toString());

	comando.setInt(1, p);

	ResultSet resultado = comando.executeQuery();

	ArrayList<Produtos> lista = new ArrayList<Produtos>();

	while (resultado.next()) {
		Produtos item = new Produtos();
		item.setCodigo(resultado.getInt("codigo"));
		item.setDescricao(resultado.getString("descricao"));
		item.setValor(resultado.getDouble("valor"));
		item.setQuantidade(resultado.getInt("quantidade"));

		lista.add(item);
	}

	return lista;
}

XHTML:

<p:commandButton value=“Selecione o Fornecedor"
actionListener=”#{MBDoacoes.prepararNovo()}“
oncomplete=“PF(‘dlgforn’).show();” update=”:frmfor:pnforn" />

	<p:dialog widgetVar="dlgforn" closable="false" draggable="false"
		resizable="false" header="Fornecedor" modal="true"
		appendTo="@(body) ">
		<h:form id="frmfor">
			<h:panelGrid id="pnforn" columns="4">
				<p:outputLabel value="Selecione um Fornecedor: *" />
				<p:selectOneMenu value="#{MBDoacoes.codforn}">
					<f:selectItem itemValue="" itemLabel="Selecione um Fornecedor" />
					<f:selectItems value="#{MBDoacoes.comboFornecedores}" var="item"
						itemValue="#{item.codigo}" itemLabel="#{item.nome}"  >
					</f:selectItems>
				</p:selectOneMenu>


			</h:panelGrid>

			<h:panelGrid columns="2">
				<p:commandButton value="Selecionar" actionListener="#{MBDoacoes.selecionaFornecedor()}"
					oncomplete="PF('dlgforn').hide();" update=":frmdoacoes:tbdoacoes" />
				<p:commandButton value="Cancelar" onclick="PF('dlgforn').hide();" />

			</h:panelGrid>

		</h:form>
	</p:dialog>

	<h:form id="frmdoacoes">

		<p:dataTable id="tbdoacoes" emptyMessage="Nenhum registro encontrado"
			value="#{MBDoacoes.produtosFiltrados}" var="produto" paginator="true"
			rows="4">

			<f:facet name="header">Lista de Produtos</f:facet>

			<p:column headerText="Nome do produto">
				<h:outputText value="#{produto.descricao}" />
			</p:column>
			<p:column headerText="Preço">
				<h:outputText value="#{produto.valor}" />
			</p:column>
			<p:column headerText="Fornecedor">
				<h:outputText value="#{produto.fornecedores.nome}" />
			</p:column>

			<p:column headerText="Opções">
				<p:commandButton icon="ui-icon-plus"
					actionListener="#{MBDoacoes.adicionar(produto)}"
					update=":frmdoacoes:tbCarrinho :frmdoacoes:txtDoaValorTotal">
				</p:commandButton>
			</p:column>

		</p:dataTable>

Se alguém tiver sugestões para melhorias, agradeço.

1 curtida